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

时间:2010-11-19 08:45:15

标签: iphone core-data nsmanagedobject nsmanagedobjectcontext nsundomanager

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

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

  • 实施canBecomeFirstResponder,返回YES
  • becomeFirstResponder
  • 中制作视图控制器viewDidAppear
  • resignFirstResponder
  • 中制作视图控制器viewDidDisappear
  • 将视图控制器中的self.undoManager重新声明为读/写
  • NSUndoManager self.undoManager方法中创建UIViewController并设置init(我已经验证了该方法已被调用)。
  • self.managedObjectModel.managedObjectContext.undoManager的设置器中将self.undoManager设置为managedObjectModel。再次,我已经证实这是被调用的。如果我不这样做,撤消根本不起作用。

故障排除我已尝试过:

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

所以我的问题是:

  • 在什么情况下撤消工作但没有显示撤消提示?
  • 接下来我会尝试对此进行排查?

1 个答案:

答案 0 :(得分:3)

我最终跟踪了一些遗留代码,这些代码是手动捕获摇动动作并在undoManager上调用undo; motionEnded的一个实现:在视图控制器中。删除后,我再次开始获取撤消提示。