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

标签 objective-c macos cocoa core-data

我的核心数据应用程序(不是基于文档的)有两个窗口。每个窗口都包含一个 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/

相关文章:

iphone - didSelectRowAtIndexPath 与部分

macos - 如何本地化 Apple 帮助手册

node.js - VM 上的 Cosmos DB 模拟器和主机 MacOS 上的 Azure Function App 未通过 SSL 验证

objective-c - 分割字符串搜索模式 Objective-C

ios - 不再需要时取消 dispatch_async 中的操作

ios - 如何设置 SKProductsRequest 超时秒? SKProductsRequest 的默认超时秒数是多少?

iphone - 在保持最大项目总数的同时向历史记录添加新项目有什么技巧或最佳实践吗?

python - pip 安装 psycopg2 不工作

iphone - 使用 NSNumberFormatter 从国际货币字符串中获取十进制值

objective-c - 使用 NSWindow 居中调整大小