多个窗口的核心数据和单独的撤消管理器?

Posted

技术标签:

【中文标题】多个窗口的核心数据和单独的撤消管理器?【英文标题】:Core Data and separate undo managers for multiple windows? 【发布时间】:2013-03-31 16:24:34 【问题描述】:

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

效果不是很好。 (在窗口之间切换时撤消步骤消失。)

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

【问题讨论】:

【参考方案1】:

这就是多重​​上下文的用途。见Core Data Programming Guide - Change Management section。

【讨论】:

以上是关于多个窗口的核心数据和单独的撤消管理器?的主要内容,如果未能解决你的问题,请参考以下文章

从众多实体中恢复一个获取的实体——核心数据

Excel VBA - 从多个打开的文件资源管理器窗口中关闭特定的文件资源管理器窗口

spring 中的多个事务管理器,并在运行时选择一个

C#:如何打开选择了多个文件的 Windows 资源管理器窗口

使用 cmd 在桌面的不同位置打开多个文件资源管理器窗口

OpenGL 窗口管理器 - 多进程合成