我有一个基于核心数据文档的应用程序,它通过与 NSManagedObjectContext 关联的内置 NSUndoManager 支持撤消/重做。我设置了一些动作,它们在 Core Data 中执行大量任务,通过beginUndoGrouping
/将所有这些任务包装到一个撤消组endUndoGrouping
中,并由 NSUndoManager 处理。
撤消工作正常。我可以执行几个连续的操作,然后依次撤消每一个操作,并且我的应用程序的状态得到正确维护。但是,永远不会启用“重做”菜单项。这意味着 NSUndoManager 告诉菜单没有要重做的项目。
我想知道为什么 NSUndoManager 似乎在撤消项目后会忘记它们,并且不允许重做?
我应该提到的一件事是,我在打开/创建文档后禁用撤消注册。当我执行一个动作时,我调用enableUndoRegistration
, beginUndoGrouping
,执行该动作,然后调用processPendingChanges
, setActionName:
, endUndoGrouping
,最后调用disableUndoRegistration
。这确保只有特定的操作是可撤消的,并且我在这些之外所做的任何其他数据更改都不会被 NSUndoManager 注意到。这可能是问题的一部分,但如果是这样,我想知道为什么它会影响重做?
提前致谢。