Re: Nil items in NSMutableSet
Re: Nil items in NSMutableSet
- Subject: Re: Nil items in NSMutableSet
- From: Alejandro Rodriguez <email@hidden>
- Date: Tue, 16 Mar 2010 19:49:58 -0400
I agree with the arguments against swizzling. While I'm not yet
convinced that the isEqual: problem is what really is causing my crash
I do feel that the way I'm using the NSSet and the objects is too
hackish for the stability and quality I want to achive in my app (as
the docs say: don't fight the framework) therefore I've decided to
move away from that approach and use a more conventional method with
NSDictionary although I must admit that I really loved using sets that
way, it made a few things very fast and easy.
Alejandro
Sent from my iPhone
On Mar 16, 2010, at 7:22 PM, Steven Degutis <email@hidden>
wrote:
Daniel,
Method swizzling is fine for debugging purposes, but should not be
used in production code. This has already been said by some people
who really, really know what they're talking about.
And it's *very* dangerous to swizzle something on NSString. The
first reason (of many) that comes to mind, is that most of Apple's
own internal Objective-C frameworks are using NSStrings, in ways and
situations you can't predict. So by advising someone to mess with
NSString's implementation, you are advising them to potentially
break their app in countless ways (possibly even data-corrupting
ones) and then send that app to unsuspecting users. Not a great
piece of advise, in my book.
-Steven
On Tue, Mar 16, 2010 at 6:34 PM, Daniel DeCovnick <email@hidden>
wrote:
There was a thread on this list a few days ago about effective
method swizzling into Apple classes. Despite being replete with
warnings about "Don't use it in production code," it IS doable, and
very, very cool, IMHO.
-Dan
On Mar 16, 2010, at 2:18 PM, Alejandro Rodriguez wrote:
You were right, my equality is not transitive.
id ob = [[objectClass alloc] initWithId:@"hello"];
[ob isEqual:@"hello"]; //returns YES
[@"hello" isEqual:ob]; //returns NO
That may very well be the problem... now... I have no idea on how I
will make the second test return YES.
doesn't that depend on the implementation of isEqual of the asking
object in this case NSString? Have any of you had to deal with this
before? I'll dive into the docs and see what details I find that
might be useful.
Seems we are getting somewhere
cheers!
Alejandro
On Mar 16, 2010, at 2:45 PM, Clark Cox wrote:
On Tue, Mar 16, 2010 at 11:35 AM, Thomas Davie <email@hidden>
wrote:
Your code doesn't account for the possibility that the order of
comparison might happen in the other order (i.e. [@"123" isEqual:
object]). I wouldn't be surprised if NSSet is assuming that equality
is transitive (i.e. [a isEqual: b] == [b isEqual: a]).
For reference, this property is not transitivity, the transitivity
relation is:
a -> b ^ b -> c => a -> c (for some relation ->)
The one you're looking for is commutativity.
Indeed; must have been echos of my previous life as a C++ programmer
creeping into the Obj-C part of my brain (in C++, the std::set class
uses less than, instead of equality, where transitivity is the
important property, not commutativity).
:)
--
Clark S. Cox III
email@hidden
_______________________________________________
Cocoa-dev mailing list (email@hidden)
Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden
_______________________________________________
Cocoa-dev mailing list (email@hidden)
Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden
--
Steven Degutis
http://www.thoughtfultree.com/
http://www.degutis.org/
_______________________________________________
Cocoa-dev mailing list (email@hidden)
Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden