NSFetchedResultsController no dispara el método de delegado después de combinar la actualización desde el hilo de background

Tengo un NSFetchedResultsController y algunas operaciones que inserta y actualiza los objects gestionados en subprocesss separados a través de NSOperationQueue.

El FRC se ve así, tenga en count que he configurado el caching a cero:

[NSFetchedResultsController deleteCacheWithName:nil]; NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:managedObjectContext sectionNameKeyPath:nil cacheName:nil]; 

Cada operación subprocess tiene su propio context de object administrado e dispara mergeChangesFromContextDidSaveNotification al MOC principal cada vez que guarda los cambios.

El código que uso para combinar contexts se ve así:

 - (void)mergeContextChanges:(NSNotification *)notification { NSManagedObjectContext *context = [fetchedResultsController managedObjectContext]; if([NSThread isMainThread] == NO) { [self performSelectorOnMainThread:_cmd withObject:notification waitUntilDone:NO]; return; } NSSet *updated = [[notification userInfo] objectForKey:NSUpdatedObjectsKey]; for(NSManagedObject *thing in updated) { NSLog(@"Background thread updated %@", [thing description]); } for(NSManagedObject *thing in updated) { [[context objectWithID:[thing objectID]] willAccessValueForKey:nil]; } [context mergeChangesFromContextDidSaveNotification:notification]; } 

Puedo confirmar observando los loggings que cada vez que las operaciones en segundo plano insertan o actualizan datos, mi método mergeContextChanges: se invoca con los valores correctos de inserción / actualización.

El problema es que mientras las inserciones combinadas activan los methods de delegación de FRC (por ejemplo, controllerDidChangeContent 🙂 correctamente, fusionar las actualizaciones no indica que el FRC dispare sus methods de delegado.

Por extraño que parezca, también puedo confirmar que el FRC dispara correctamente a sus delegates si ejecuto las actualizaciones en el hilo principal utilizando el MOC principal .

¿Cómo puedo hacer que el FRC dispare sus methods de delegado cuando se fusionan los MOC actualizados?

Más información: Parece que el uso de cualquier MOC que no sea el MOC principal y el bash de combinar actualizaciones del MOC principal tiene los mismos resultados; el FRC se niega a notarlo.

Oh hombre.

Parece que acceder a la MOC principal desde mis operaciones de subprocesamiento (incluso si se trata de una tarea no relacionada con los datos que estaba intentando actualizar) provoca este extraño comportamiento.

Espero que esto ayude a cualquier otra persona que se encuentre con este problema.