In a iPhone app I’m currently developing, I have a tipical Core Data object model with two entities (called Collection and Item) in a one-to-many relationship, and two table views for the entities, the second appearing when selecting a Collection in the first. The two table views have their own controller (which implements NSFetchedResultsControllerDelegate), managed object context and NSFetchedResultsController. The second table has has a reference to the Collection object, used to build a predicate in this way:

[NSPredicate predicateWithFormat:@"collection == %@", [self.collection objectID]]


In the first table view (the collections) everything works.
In the second (the items of a collection) when a new object is added, none of the NSFetchedResultsControllerDelegate methods gets called.
Moreover, when the name of an item is modified, the method controller:didChangeObject:atIndexPath:forChangeType:newIndexPath: is called, but with type NSFetchedResultsChangeDelete instead of NSFetchedResultsChangeUpdate.

The problem is that, because of a bug in NSFetchedResultsController (see this post on the Apple Developer Forum) , the NSPredicate above does a pointer comparison between two objects that are in two different contexts, so a possibile workaround until it get fixed would be something like this:

[NSPredicate predicateWithFormat:@"collection == %@", [self.managedObjectContext objectWithID:[self.collection objectID]]];