我的核心数据应用程序(不是基于文档的)有两个窗口。每个窗口都包含一个 TableView ,其中包含来自同一 NSManagedObjectContext 的(不同)数据。我在两个窗口 Controller 中使用此代码来启用撤消支持:
- (NSUndoManager *)windowWillReturnUndoManager:(NSWindow *)window {
return [[(AppDelegate *)[NSApp delegate] managedObjectContext] undoManager];
}
这样做的缺点是,当用户在另一个窗口中工作时,他将撤消在一个窗口中所做的更改。即使用户选择关闭其中一个窗口,撤消管理器仍将撤消已关闭窗口中的更改。这个问题的明显解决方案是使用两个单独的 NSUndoManager 对象,但我不知道如何做到这一点。我尝试过使用 NSManagedObjectContexts“-setUndoManager:” 以及每个窗口的单独撤消管理器,但我找不到放置代码的合适位置,所以我尝试了以下方法:
- (NSUndoManager *)windowWillReturnUndoManager:(NSWindow *)window {
[[(CAppDelegate *)[NSApp delegate] managedObjectContext] setUndoManager:self.myUndoManager];
return self.myUndoManager;
}
效果不太好。 (在窗口之间切换时撤消步骤消失。)
执行此操作的正确方法是什么?
最佳答案
这就是多个上下文的用途。请参阅Core Data Programming Guide - Change Management section 。
关于objective-c - 核心数据和多个窗口的单独撤消管理器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15731611/