Comparing two NSManagedObjects

Nick Locking picture Nick Locking · Jan 19, 2011 · Viewed 9.7k times · Source

I have some code that loops through an array of NSManagedObjects and stops when it finds a certain record that is stored in an instance variable. The only way I can manage to see if they are the same record (not an equivalent record, the specific record) is by comparing the URIRepresentations of the objectIDs. This surely cannot be the best way of doing it. I'm doing:

if ([[[obj1 objectID] URIRepresentation] isEqualTo: [[_obj2 objectID] URIRepresentation]]) {
  NSLog(@"Match");
}

The following code never matches even when I NSLog the objectIDs and see that they are in fact exactly the same.

if ([[obj1 objectID] isEqualTo: [_obj2 objectID]]) {
  NSLog(@"Match");
}

Answer

ImHuntingWabbits picture ImHuntingWabbits · Feb 25, 2011

The commenter is correct, isEqualTo: will not work in this case since they are different instances of NSManagedObjectID.

The way you are doing this is actually the best way, the objectID is CoreData's unique identifier for a given managed object, it's the only way to tell if two instances of NSManagedObject point to the same record in the persistent store.