Author と Book の 2 つのエンティティがあります。Author には属性 authorName と対多関係 book があります。Book にはいくつかの属性と著者の関係があります。Author オブジェクトを編集するためのビュー コントローラ (VCAuthor) があります。子View Controller(VCBook)は、著者の本を編集するためのものです。管理対象オブジェクト コンテキストは 1 つだけです。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 で、Obama から Big Obama までの UITextfiled authorNameTextField で authorName を編集し、- (void)viewWillDisappear:(BOOL)animated で author.authorName = authorNameTextField.text によって MOC に保存します。 {} 方法。次に、子ビュー コントローラー VCBook に移動して著者の書籍を編集し、キャンセル ボタンをクリックして VCAuthor に戻りました。authorName がまだオバマであることがわかりました。これは、authorName の予期された変更が元に戻されたことを意味します。authorName の変更は元に戻すグループにまったく含まれていません。なぜこれが起こるのでしょうか? ps。もちろん、VCAuthor に戻ったときにデータをリロードします。元に戻す前後に authorName を NSLog するだけです。元に戻す前の authorName は、変更された Big Obama であり、元に戻すと、Obama になります。