desfazer todas as alterações feitas no controlador de exibição filho
Existem duas entidades: Autor e Livro. O autor possui um atributo authorName e muitos livros de relacionamentos. Livro tem vários atributos e um autor de relacionamento. Existe um controlador de visualização (VCAuthor) para editar um objeto Autor. O controlador de visão filho (VCBook) é para editar livros do autor. Existe apenas um managedobjectcontext. Na classe VCBook eu agrupo o undomanager da seguinte forma
<code>-(void)viewDidLoad { NSUndoManager *anUndoManager = [[NSUndoManager alloc] init]; [self.book.managedObjectContext setUndoManager:anUndoManager]; [anUndoManager release]; [self.book.managedObjectContext.undoManager beginUndoGrouping]; } -(void)cancelAction:(id)sender { NSLog(@"%@", self.author.authorName); [self.book.managedObjectContext.undoManager endUndoGrouping]; [self.book.managedObjectContext.undoManager undoNestedGroup]; self.book.managedObjectContext.undoManager = nil; NSLog(@"%@", self.author.authorName); [self dismissModalViewControllerAnimated:YES]; } </code>
O cancelAction está vinculado a um botão de cancelamento no VCBook que costumava desfazer todas as alterações feitas no VCBook.
Problemas estão aqui: Primeiro, no VCAuthor, eu edito o authorName em um authorNameTextField de UITextfiled de Obama para Big Obama e salve-o no MOC por author.authorName = authorNameTextField.text no - (void) viewWillDisappear: (BOOL) animated {} método. Então eu fui para o controlador de visão infantil VCBook para editar livros do autor e clique no botão cancelar para voltar ao VCAuthor. Eu acho que o authorName ainda é Obama, isso significa que a mudança esperada do authorName foi anulada. A alteração do authorName não está no grupo de desfazer, e por que isso aconteceu? ps. É claro que eu reloadData quando eu volto para o VCAuthor. Eu apenas NSLog o autorName antes e depois do desfazer. Antes desfazer o authorName é o mudado Big Obama, e depois desfazer ele se torna Obama