有两个实体:作者和书籍。作者具有属性authorName和一个to-many关系books。Book具有多个属性和一个关系author。有一个视图控制器(VCAuthor)用于编辑作者对象。子视图控制器(VCBook)用于编辑作者的书籍。只有一个managedobjectcontext。在VCBook类中,我将undomanager分组如下:
-(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];
}
cancelAction是与VCBook中的取消按钮相关联的,用于撤消在VCBook中所做的所有更改。
问题在于:首先,在VCAuthor中,我使用UITextfiled authorNameTextField编辑了authorName,将其从Obama修改为Big Obama,并通过author.authorName = authorNameTextField.text在- (void)viewWillDisappear:(BOOL)animated{}方法中保存到MOC。然后,我进入子视图控制器VCBook来编辑作者的书籍,并单击取消按钮返回到VCAuthor。我发现作者名称仍然为Obama,这意味着预期的作者名称更改已被撤消。作者姓名的更改根本不在撤消组中,为什么会发生这种情况?ps.当我回到VCAuthor时,我肯定会重新加载数据。
我只是在撤消前后NSLog作者名称。在undo之前,作者名称已更改为Big Obama,在undo之后变为了Obama。