0

我在我的 iPhone 应用程序中创建了一个包含多个 NSNumber 成员的托管对象。我初始化这些值。我还创建了一个子对象成员。然后,我创建了一个撤消管理器,以便我可以对子对象执行撤消操作,而撤消不会影响初始化的参数。但是,当我启动我的应用程序并调用...

[undoManager canUndo];

......这是“是”。怎么会这样?顶级数据成员重置为零。不仅如此,子对象的 managedObjectContext 也是 nil。在创建撤消管理器之前创建子对象时怎么会这样。撤消管理器是否具有追溯性?即使在我创建撤消管理器之前设置了这些数据成员,它似乎也允许撤消整个托管对象。

任何见解都值得赞赏。

4

2 回答 2

2

看来,如果未保存托管对象,则 NSUndoManager 的创建将应用于对象,因为它存在,并将允许撤消对对象的任何更改。我通过在视图出现之前简单地保存对象来发现这一点,因为对象是从各种屏幕上的选项创建的。如果我在保存对象后尝试撤消,canUndo 按预期返回 NO。

另一种选择是在视图出现后以某种方式在撤消管理器上调用 removeAllActions,但这会产生问题,因为入口点太多。现在对象已保存,如果用户取消,我将删除它。

我希望这对将来的某人有所帮助。

于 2011-01-15T01:29:45.667 回答
0

撤消管理器中更改的注册被推迟。您必须确保在设置撤消管理器之前处理更改。您可以使用 processPendingChanges 方法。这里的小例子:

// create initial objects
[managedObjectContext processPendingChanges];

// enable undo
managedObjectContext.undoManager = undoManager;
于 2013-06-07T08:51:08.247 回答