为什么NSUndoManager可以使用YES?

时间:2011-01-14 06:02:38

标签: iphone nsundomanager

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

[undoManager canUndo];

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

感谢任何见解。

2 个答案:

答案 0 :(得分:2)

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

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

我希望将来可以帮助某人。

答案 1 :(得分:0)

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

// create initial objects
[managedObjectContext processPendingChanges];

// enable undo
managedObjectContext.undoManager = undoManager;