NSFetchedResultsController no muestra actualizaciones de un contexto diferente

Yo tengo unNSFetchedResultsController y algunas operaciones actualizan los objetos gestionados en hilos separados a través deNSOperationQueue.

El FRC (con su predicado) se ve así:

<code>- (NSFetchedResultsController*)fetchedResultsController
{
    if(fetchedResultsController) return fetchedResultsController;

    NSManagedObjectContext* mainContext = [self managedObjectContext];

    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
    [fetchRequest setEntity:[NSEntityDescription entityForName:@"Check" inManagedObjectContext:mainContext]];
    [fetchRequest setPredicate:[NSPredicate predicateWithFormat:@"isSync == %@", [NSNumber numberWithBool:NO]]];
    [fetchRequest setFetchBatchSize:10];

    fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:mainContext sectionNameKeyPath:nil cacheName:nil];
    fetchedResultsController.delegate = self;

    [fetchRequest release], fetchRequest = nil;

    return fetchedResultsController;
}
</code>

El subproceso principal y la operación de subproceso tienen sus propios contextos de objeto administrado. Solo comparten el mismo coordinador.

Dentro de la operación roscada cambio elisSync propiedad deNO aYES. Para saber que esCheck entidad a actualizar, el contexto principal pasa al subproceso unNSManagedObjectID. La operación de subproceso recupera el objeto gestionado como el siguiente:

<code>-(void)main
{
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

    NSManagedObjectContext *exportContext = [[NSManagedObjectContext alloc] init];
    [exportContext setPersistentStoreCoordinator:[self persistentStoreCoordinator]];

    //...

    Check* check = (Check*)[exportContext existingObjectWithID:objID error:&error];
    check.isSync = [NSNumber numberWithBool:YES];

    //...

    [exportContext save:&error];

    [pool release], pool = nil;
}
</code>

Cuando la operación de hilo llama asave lamergeChangesFromContextDidSaveNotification Se llama a la notificación y el contexto principal fusiona los cambios.

<code>- (void)contextChanged:(NSNotification*)notification
{
    if ([notification object] == [self managedObjectContext]) return;

    if (![NSThread isMainThread]) {
        [self performSelectorOnMainThread:@selector(contextChanged:) withObject:notification waitUntilDone:YES];
        return;
    }

    [[self managedObjectContext] mergeChangesFromContextDidSaveNotification:notification];
}
</code>

Registrando la descripción de lanotification lleva a verificar que los cambios se realizan correctamente.

Mi problema

Delegados métodos deNSFetchedResultsControllerDelegate no son llamados

Esto es bastante extraño ya que tratar con el mismo contexto, el principal, permite escuchar los cambios y llamar a los métodos de los delegados, por ejemplo. borrando un objeto de fila en elUITableView.

He encontrado algunos temas sobre SO con el mismo problema. He intentado todas las soluciones alternativas pero no puedo encontrar una solución valiosa:

NSFetchedResultsController no muestra actualizaciones de otros contextos

NSFetchedResultsController no dispara el método de delegado después de fusionar la actualización del subproceso en segundo plano

NSFetchedResultsController con predicado ignora los cambios combinados de diferentes NSManagedObjectContext

Gracias de antemano.

Editar

El código de arriba estaba trabajando en un modelo anterior. Luego creé un nuevo modelo copiando (y pegando) entidades del anterior y ahora ya no funciona.

Sugerencias?

Editar 2

Este es el predicado que estoy usando enNSFetchedResultsController adquiridor. Es mi culpa, pero cuando escribí el post no lo copié.

<code>NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"insertionDate" ascending:NO];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];

// previous code here
[fetchRequest setSortDescriptors:sortDescriptors];
</code>

Ahora, sobreJody último comentario

En la parte principal () de su NSOperation, está cargando nuevos objetos, y allí parece que está configurando isSync en SÍ para cada nuevo objeto. El predicado que usa para el comando fetchedResultsController solo busca los objetos que tienen isSync == NO.

Espero que cuando la propiedadisSync se establece en SÍ, elNSFetchedResultsController observa que cambia y elimina las filas que no coinciden con el predicado. ¿Me equivoco?

Recuerde que cuando fusiono cambios del fondo al hilo principal, puedo ver que pocos objetos han actualizado suisSync propiedad.

Respuestas a la pregunta(2)

Su respuesta a la pregunta