1

我的 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;
}

它没有很好地工作。(在窗口之间切换时撤消步骤消失。)

这样做的正确方法是什么?

4

1 回答 1

2

这就是多重​​上下文的用途。请参阅核心数据编程指南 - 变更管理部分

于 2013-03-31T17:13:00.513 回答