2012-03-14 14 views
6

Estoy usando NSFetchedResultsController para completar y administrar el origen de datos de mis tablas.¿Debo manualmente guardar managedObjectContext para NSFetchedResultsController si cambio algún atributo?

Cuando un usuario elige un cierto orden, una actionsheet aparece a continuación, permite al usuario cambiar un valor para esa fila:

NSManagedObject *managedObject = [fetchedResultsController objectAtIndexPath:selectedRowIndexPath]; 
[managedObject setValue:status forKey:@"status"]; 

Esto funciona muy bien y puedo ver los cambios inmediatamente en el tableview. Esto significa que NSFetchedResultsController sabe que algo ha cambiado y, por lo tanto, vuelve a cargar esa tableviewcell. Cuando paro y salgo de mi aplicación (completamente) y luego la vuelvo a abrir, el cambio no se guarda.

Creo que NSFetchedResultsConroller se encarga de guardar los cambios.

¿Debo guardar manualmente usando el siguiente código después de cada cambio?

// Save the context. 
NSError *error = nil; 
if (![self.managedObjectContext save:&error]) { 
    NSLog(@"Unresolved error %@, %@", error, [error userInfo]); 
    abort(); 
} 

O puede llamar a este código en:

- (void)controller:(NSFetchedResultsController *)controller didChangeObject:(id)anObject 
     atIndexPath:(NSIndexPath *)indexPath 
    forChangeType:(NSFetchedResultsChangeType)type 
     newIndexPath:(NSIndexPath *)newIndexPath 

Respuesta

6

Estás en lo correcto. Debe guardar manualmente el contexto en la tienda. NSFetchedResultsController toma datos del contexto, pero no guarda datos en la tienda.

+0

Así que no es una mala idea guardar dentro del método delegado 'didChangeObject'? – Pieter

+1

Si lo hicieras, podrías arriesgarte a un bucle. Los métodos delegados NSFetchedResultsController se utilizan para actualizar la vista, no el modelo. Por lo tanto, cada vez que se guarda algo en el contexto, la vista se actualiza en consecuencia (básicamente, para que no tenga que volver a cargar la vista de tabla). Si tuviera que guardar el contexto en el método de delegado, el método de delegado continuaría disparando porque notará un cambio en el contexto. – Gobot

+0

¿Cuál es la solución? – fatuhoku

Cuestiones relacionadas