My app uses Core Data (with some help of Magical Record) and is rather heavily multithreaded using NSOperation.
Of course I am very careful to only pass around NSManagedObjectID between threads/operations.
Now, to get back to the corresponding managed object in an operation, I use -existingObjectWithID:error: thus:
Collection *owner = (Collection *)[localContext existingObjectWithID:self.containerId error:&error];
But what I get back is nil and error says this is an error #13300: NSManagedObjectReferentialIntegrityError.
Here is what the documentation says about this error:
NSManagedObjectReferentialIntegrityError
Error code to denote an attempt to fire a fault pointing to an object that does not exist.
The store is accessible, but the object corresponding to the fault cannot be found.
Which is not true in my case: that object exists. Indeed, If I iterate through all instances of that Collection entity with an NSFetchRequest, I find it among them, and its NSManagedObjectID is exactly the one I passed to -existingObjectWithID:error:.
Moreover, if I use -objectWithID: instead, I get a correct object back just fine.
So there is something I'm missing. Here are a few additional observations/questions:
- "an object that does not exist": what it the meaning of "exist" in that sentence? "exist" where? It definitely "exists" in my Core Data store at that point.
 - "the object corresponding to the fault cannot be found": what it the meaning of "found" in that sentence? "found" where? It definitely "be found" in my Core Data store at that point.
 
So maybe I am missing something regarding what existingObjectWithID:error: does? The documentation says:
If there is a managed object with the given ID already registered in the context, that object is returned directly; otherwise the corresponding object is faulted into the context.
[...]
Unlike objectWithID:, this method never returns a fault.
This doesn't help my issue. I don't mind getting my object fully faulted, and not a fault. In fact, any fault within it will fire on the next code line when I access the object properties.
- What would be a realistic scenario leading to an 
NSManagedObjectReferentialIntegrityError? 
Thanks for any enlightenment.