在 CoreData 应用程序上摇动撤消工作,但没有显示撤消/重做提示

Posted

技术标签:

【中文标题】在 CoreData 应用程序上摇动撤消工作,但没有显示撤消/重做提示【英文标题】:Shake-to-undo working on CoreData app, but no undo/redo prompts shown 【发布时间】:2010-11-19 08:45:14 【问题描述】:

我有一个基于 CoreData 的应用程序,它支持摇动撤销。这目前工作正常,但是当我摇动设备时,撤消会立即发生,而不会首先显示 NSUndoManager 通常免费提供的常用撤消提示。

我从“撤消架构”文档中阅读了“在 iPhone 上使用撤消”,并且是:

实现canBecomeFirstResponder,返回YESviewDidAppear 中制作视图控制器becomeFirstResponderviewDidDisappear 中制作视图控制器resignFirstResponder 将视图控制器中的self.undoManager 重新声明为读/写 创建一个NSUndoManager 并在UIViewController init 方法中设置self.undoManager(我已经验证它正在被调用)。 在managedObjectModel 的设置器中将self.managedObjectModel.managedObjectContext.undoManager 设置为self.undoManager。再一次,我已经验证这被调用了。如果我不这样做,撤消根本不起作用。

我已经尝试过的故障排除:

检查撤消确实有效(我看到对 managedObjectModel 的更改已恢复) 正在调用验证canBecomeFirstResponder 检查是否在撤消操作期间调用了访问器self.undoManager(不是)。

所以我的问题是:

在什么情况下撤消有效但不显示撤消提示? 接下来您会尝试如何解决此问题?

【问题讨论】:

【参考方案1】:

我最终找到了一些遗留代码,这些代码手动捕捉抖动并在 undoManager 上调用 undo; motionEnded: 在视图控制器中的实现。删除后,我又开始收到撤消提示。

【讨论】:

以上是关于在 CoreData 应用程序上摇动撤消工作,但没有显示撤消/重做提示的主要内容,如果未能解决你的问题,请参考以下文章

UIPopover 防止摇晃撤消

使用 2 个链接的 ManagedObjectContext 应用程序撤消 CoreData 更改

CoreData 中的撤消操作

核心数据:如何在两个 NSManagedObjectContext 之间合并插入/更新/删除,同时将合并保持为可撤消的步骤?

iOS 4 应用程序终止和撤消

核心数据保存更改撤消