On Thu, Aug 20, 2009 at 9:09 PM, Jeff Laing<jeff.la...@spatialinfo.com> wrote: >> Core Data doesn't use random objects as keys in dictionaries or sets >> for this reason. It's not that we don't trust you, but ... to >> prevent misunderstandings, all NSManagedObject subclasses are >> forbidden from overriding -hash and -isEqual. > > I have to admit, I didn't know this bit but I see it in the developer library > along with a bunch of others. > >> If you need to know whether or not another object has put your object >> into an NSDictionary, you're probably doing something wrong. Do you >> have a specific concern about Core Data using your objects ? > > No, I guess the point I was trying to make was that this discussion seemed to > have touched on "if you put your objects into an NSSet then you'll need to be > more careful about the implementation of -hash, etc". I was trying to point > out that just because my application code doesn't go anywhere near NSSet, its > conceivable (to me) that Core Data (for example) might be storing dirty > objects in an NSSet "behind your back". So you can't "not implement -hash, > etc properly" and hope everything will work.
The solution is simple: If you implement -hash, you must implement -isEqual: If you implement -isEqual:, you must implement -hash If -isEqual: returns true for two given objects, those objects must return the same value for -hash If you don't implement either, NSObject's implementations are fine also. i.e. NSObjects implementations are basically: -(NSUInteger)hash { return (NSUInteger) self; } -(BOOL)isEqual:(id)obj { return self == obj; } -- Clark S. Cox III clarkc...@gmail.com _______________________________________________ Cocoa-dev mailing list (Cocoa-dev@lists.apple.com) 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: http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com This email sent to arch...@mail-archive.com