2010-10-21 16 views
6

He estado navegando por las publicaciones similares a esta, pero ninguna ha respondido a mi problema.NSFetchedResultsController métodos de delegado que no se activan después de mergeChangesFromContextDidSaveNotification

Al igual CoreDataBooks, uso un MOC separada para añadir y editar elementos y observar las notificaciones apropiadas, así:

- (void)addControllerContextDidSave:(NSNotification*)saveNotification { 

    NSManagedObjectContext *context = [self.fetchedResultsController managedObjectContext]; 
    // Merging changes causes the fetched results controller to update its results 
    [context mergeChangesFromContextDidSaveNotification:saveNotification]; 
    NSLog(@"merging changes in rootview"); 
} 

Cuando utilice el comando Guardar, se observó correctamente. La depuración de la notificación muestra el contexto correcto, y la depuración del contexto muestra el elemento recién agregado. El mensaje de registro también se imprime bien. Pero nada pasa. Ninguno de los métodos delegados de NSFetchedResultsController se activa, ni se actualiza la vista de tabla.

He intentado sin caché o borrarlo. Intenté reloadData en la vista de tabla, pero nada. Cuando salgo de la aplicación y reinicio, aparece bien.

ACTUALIZACIÓN: La notificación incluye efectivamente el contexto adecuado como su object, que contiene el producto correcto, pero el userInfo de hash no tiene nada en ella:

userInfo = { 
    inserted = "{(\n)}"; 
    updated = "{(\n)}"; 
} 

Así que parece que la notificación no lo hace tiene algún cambio, a pesar de tener el contexto correcto con el ítem cambiado ... hmmmm.

Respuesta

1

Y el premio al error más estúpido es demasiado ... ¡¡Christoph !!

La razón por la que la notificación no mostraba nada era porque había olvidado realizar un guardado en el MOC por separado antes de llamar al delegado que configuró la notificación y luego volver a guardarla.

Dado que el MOC se acaba de guardar, el segundo guardado no tuvo cambios y, por lo tanto, la notificación permaneció vacía. Eliminar el primer guardado, como debería haber hecho mucho antes, solucionó el problema.

Cuestiones relacionadas