Grupo de deshacer anidado con CoreData
Quiero agregar un administrador de deshacer a una aplicación de iPhone respaldada por coredata. Cuando el usuario intenta agregar un nuevo objeto (tocando el botón +), cargo un nuevo controlador de vista modal e inicio un nuevo grupo de deshacer en viewDidLoad.
Cuando el usuario presiona el botón Cancelar, quiero revertir los cambios en la devolución de llamada cancelAction.
Consultas:
¿Es posible iniciar un grupo Deshacer anidado y persistirlo a través del bucle de eventos y cotejar todos los cambios realizados en un solo grupo Deshacer? En este momento, cuando llamo a beginUndoGrouping en cancelAction, aparece una excepción de beginUndoGrouping que falta.¿Cuál es el significado de la API groupsByEvent para NSUndoManager? ¿Debo establecerlo en NO para persistir un grupo de deshacer a través del bucle de eventos?¿Qué debe hacerse en la devolución de llamada saveAction para hacer cambios permanentes (aparte de llamar a save en mangedObjectContext)? ¿Cómo le digo a Undo Manager que deje de rastrear los cambios?Mensaje de error:
* Finalización de la aplicación debido a la excepción no detectada 'NSInternalInconsistencyException', razón: '_endUndoGroupRemovingIfEmpty :: NSUndoManager 0x75415f0 está en estado no válido, endUndoGrouping llamado sin inicio de coincidencia
Código de muestra:
// RootViewController.m
- (void) addAction {
// Load Modal View Controller to add new object
}
// AddViewController.m
- (void) viewDidLoad {
// Start nested undo group
[self.managedObjectContext processPendingChanges];
[self.managedObjectContext.undoManager beginUndoGrouping];
[self createModel];
}
- (void) cancelAction {
// Revert all changes
[self.managedObjectContext processPendingChanges];
[self.managedObjectContext.undoManager endUndoGrouping];
[self.managedObjectContext.undoManager undoNestedGroup];
...
}
- (void) saveAction {
// Save changes
}