NSUndoManager会撤消后台发生的变化吗?

时间:2012-12-16 03:57:29

标签: objective-c ios cocoa-touch core-data nsundomanager

我有一个编辑视图控制器,我正在使用NSUndoManager,它是我的持久性存储(核心数据项目)的一套。

我的应用程序的一个功能是与外部服务器同步。我想知道的是,如果我在我的视图中编辑某些内容,同时应用程序正在与服务器同步,如果我改变主意并决定撤消当前编辑中的任何更改,它是否也会撤消同步期间所做的所有更改,如果它们是在撤消分组开始时制作的,还是只撤消我自己做出的更改?

1 个答案:

答案 0 :(得分:3)

取决于您的实施。通常,撤消管理器会为您的事件打开撤消组并封装更改,请参阅groupsByEvent。如果您使用辅助托管对象上下文进行后台同步,并将上下文合并回主上下文 您必须确保已禁用撤消注册,请参阅disableUndoRegistration。

编辑: 这是一个小代码片段,您可以在单独的上下文中同步而无需创建撤消操作

// create a child context with no undo manager
NSManagedObjectContext *context = [NSManagedObjectContext contextWithParent:self.managedObjectContext];
context.undoManager = nil;

[... do your synchronization with the child context...]

// merge into main context without generating undo actions
[undoManager disableUndoRegistration];
[context save:&error];
[managedObjectContext processPendingChanges];
[undoManager enableUndoRegistration];

// to prevent undo action beyond the synchronization to remove all undo actions
[undoManager removeAllActions];