核心数据自动撤销

Core Data automatic undo

抱歉,如果这个问题已经解决(一如既往),但我找不到明确的答案,所以...

大约 OS X 10.7(我知道的旧东西),我为 Mac 开发的核​​心数据应用程序具有“自动”撤消支持。这是一项核心数据功能。使用默认的“撤消”菜单可以简单地撤消对托管对象上下文的更改,无需任何自定义代码行。

这似乎不再适用于这个旧的 Xcode 项目。撤消菜单不执行任何操作并且显示为灰色(相同的应用程序,相同的代码)。

为了检查,我创建了最简单的代码数据应用程序项目(仍然是 Obj-C),是的,它不支持自动撤消。撤消菜单总是变灰,当我向 MOC 的撤消管理器发送 canUndo 消息时,它 returns NO 即使我对托管对象进行了更改。

自动撤消不再是核心数据功能了吗?我已经太老了吗? (您不必回答这个问题。)

谢谢。

很可能您的托管对象上下文的 undoManager 是 nil,这是默认值。 Core Data 无法自行撤消,但可以与撤消管理器一起使用。创建一个或传入一个已存在的 - 例如,NSDocument 有一个撤消管理器,而您的应用程序委托可能有一个。

感谢 Tom 的意见和答案,这是一个简单的修复 issue

macOS 核心数据应用不再默认设置撤消管理器。他们以前曾经有过一个(如对上面链接问题的回复中所示)。

为了将撤消管理器添加到托管对象上下文,我刚刚将这些代码行添加到 AppDelegate.mNSManagedObjectContext 方法中(就在 return 行之前):

NSUndoManager *undoManager = [[NSUndoManager alloc] init];
[_managedObjectContext setUndoManager:undoManager];

撤消再次起作用。