私の Core Data アプリ (ドキュメントベースではない) には 2 つのウィンドウがあります。各ウィンドウには、同じ NSManagedObjectContext からの (異なる) データを含むテーブル ビューが含まれています。両方のウィンドウ コントローラーで次のコードを使用して、元に戻すサポートを有効にします。
- (NSUndoManager *)windowWillReturnUndoManager:(NSWindow *)window {
return [[(AppDelegate *)[NSApp delegate] managedObjectContext] undoManager];
}
これの欠点は、ユーザーが 1 つのウィンドウで行った変更を、別のウィンドウで作業している間に元に戻してしまうことです。また、ユーザーがいずれかのウィンドウを閉じることを選択した場合でも、元に戻すマネージャーは閉じたウィンドウの変更を元に戻します。この問題の明らかな解決策は、2 つの別個の NSUndoManager オブジェクトを使用することですが、これを行う方法がわかりません。NSManagedObjectContexts "-setUndoManager:" をウィンドウごとに個別の元に戻すマネージャーで使用しようとしましたが、コードを配置する適切な場所が見つからなかったので、これを試しました:
- (NSUndoManager *)windowWillReturnUndoManager:(NSWindow *)window {
[[(CAppDelegate *)[NSApp delegate] managedObjectContext] setUndoManager:self.myUndoManager];
return self.myUndoManager;
}
うまくいきませんでした。(ウィンドウを切り替えると元に戻す手順が消えました。)
これを行う正しい方法は何ですか?