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
Así que no es una mala idea guardar dentro del método delegado 'didChangeObject'? – Pieter
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
¿Cuál es la solución? – fatuhoku