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
}

Respuestas a la pregunta(1)

Su respuesta a la pregunta