core data - NSFetchedResultsController with predicate ignores changes merged from different NSManagedObjectContext -


i presenting table view contents using nsfetchedresultscontroller has predicate:

[nspredicate predicatewithformat:@"visible == %@", [nsnumber numberwithbool:yes]] 

on background thread using separate nsmanagedobjectcontext update few of entities , change theirs visible value no yes. save, merge changes in main thread's nsmanagedobjectcontext. nsfetchedresultscontroller's fetchedobjects doesn't change. controller doesn't call -controller:didchangeobject:... on delegate. if entities updated on main thread in identical manner (my test app calls same method), works expected.

also notification's nsupdatedobjectskey contains objects.

currently solutions i've found call each of nsupdatedobjectskey entities:

nsmanagedobjectcontext *context = ... // main thread context [context existingobjectwithid:[object objectid] error:nil] 

this issue updated objects didn't match predicate.

am missing obvious?

turns out main nsmanagedobjectcontext didn' t event fire nsmanagedobjectcontextobjectsdidchangenotification updated objects because not done faulted objects.

generic fix (or keep track of object ids needs treatment):

nsmanagedobjectcontext *context = [self managedobjectcontext]; for(nsmanagedobject *object in [[notification userinfo] objectforkey:nsupdatedobjectskey]) {   [[context objectwithid:[object objectid]] willaccessvalueforkey:nil]; }  [context mergechangesfromcontextdidsavenotification:notification]; 

from nsmanagedobject class reference:

you can invoke method key value of nil ensure fault has been fired, illustrated following example.


Comments