我有一个编辑视图控制器,我正在使用一个 NSUndoManager,它是我的持久性存储(核心数据项目)的集合。
我的应用程序的功能之一是与外部服务器同步。我想知道的是,如果我在视图中编辑某些内容,同时应用程序正在与服务器同步,如果我改变主意并决定撤消当前编辑中的任何更改,它是否也会撤消如果在撤消分组开始时进行了同步期间所做的所有更改,还是只会撤消我自己所做的更改?
我有一个编辑视图控制器,我正在使用一个 NSUndoManager,它是我的持久性存储(核心数据项目)的集合。
我的应用程序的功能之一是与外部服务器同步。我想知道的是,如果我在视图中编辑某些内容,同时应用程序正在与服务器同步,如果我改变主意并决定撤消当前编辑中的任何更改,它是否也会撤消如果在撤消分组开始时进行了同步期间所做的所有更改,还是只会撤消我自己所做的更改?
取决于您的实施。通常,撤消管理器会为您的事件打开一个撤消组并封装更改,请参阅 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];