Aninhar grupo aninhado com CoreData
Quero adicionar um gerenciador de desfazer a um aplicativo para iphone com backup de coredata. Quando o usuário tenta adicionar um novo objeto (tocando no botão +), carrego um novo controlador de exibição modal e inicio um novo grupo de desfazer no viewDidLoad.
Quando o usuário pressiona o botão Cancelar, desejo reverter as alterações no retorno de chamada cancelAction.
Consultas:
É possível iniciar um grupo de desfazer aninhado e persistir por meio do loop de eventos e agrupar todas as alterações feitas em um único grupo de desfazer? No momento, quando chamo beginUndoGrouping em cancelAction, recebo uma exceção beginUndoGrouping ausente.Qual é o significado da API groupsByEvent para NSUndoManager? Preciso configurá-lo como NÃO para manter um grupo de desfazer por meio do loop de eventos?O que precisa ser feito no retorno de chamada saveAction para tornar as alterações permanentes (além de chamar save no mangedObjectContext)? Como digo ao Undo Manager para parar de rastrear as alterações?Mensagem de erro:
* Finalizando o aplicativo devido à exceção não capturada 'NSInternalInconsistencyException', motivo: '_endUndoGroupRemovingIfEmpty :: NSUndoManager 0x75415f0 está no estado inválido, endUndoGrouping chamado sem início correspondente
Código de amostra:
// 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
}