NSUndoManagerを使用している編集ビューコントローラーがあります。これは、永続ストア(コアデータプロジェクト)用に設定されたものです。
私のアプリの機能の1つは、外部サーバーとの同期です。私が知りたいのは、ビューで何かを編集しているときに、アプリがサーバーと同期している場合、気が変わって現在の編集の変更を元に戻すことにした場合、それも元に戻すでしょうか?元に戻るグループ化の開始中に行われた場合、同期中に行われたすべての変更、または自分で行った変更のみを元に戻すのでしょうか?
NSUndoManagerを使用している編集ビューコントローラーがあります。これは、永続ストア(コアデータプロジェクト)用に設定されたものです。
私のアプリの機能の1つは、外部サーバーとの同期です。私が知りたいのは、ビューで何かを編集しているときに、アプリがサーバーと同期している場合、気が変わって現在の編集の変更を元に戻すことにした場合、それも元に戻すでしょうか?元に戻るグループ化の開始中に行われた場合、同期中に行われたすべての変更、または自分で行った変更のみを元に戻すのでしょうか?
実装によって異なります。通常、UNDOマネージャーはイベントのUNDOグループを開き、変更をカプセル化します。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];