我的 Core Data 应用程序(不是基于文档的)有两个窗口。每个窗口都包含一个表视图,其中包含来自同一 NSManagedObjectContext 的(不同)数据。我在两个窗口控制器中使用此代码来启用撤消支持:
- (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;
}
它没有很好地工作。(在窗口之间切换时撤消步骤消失。)
这样做的正确方法是什么?