4

CoreData(NSManagedObject)オブジェクトのiPhoneアプリケーションでNSUndoManagerを使用して、アプリケーションが途中で終了した場合(たとえば、電話がかかってきたため)にNSUndoManagerの状態を保存(および後で復元)できるようにしたいと思います。つまり、NSUndoManagerに蓄積された変更を自動的に破棄または保存するのではなく、ユーザーがアプリを再起動したときに明示的に破棄または保存できるように、それらを復元したいと思います。

誰かがこれを経験したことがありますか?アプリケーションが中断されたときにNSManagedObjectContextで保留中の変更を管理するために、この(または代替の)アプローチを推奨できる人はいますか?

4

2 に答える 2

2

NSUndoManager実際には状態を保存しません。状態を復元するアクションのスタックを保存します。たとえば、オブジェクト XXX があり、そのプロパティ名が文字列であり、その名前を「Steve」から「Joe」に変更した場合、NSUndoManager が保存するのは、ターゲット、セレクター、およびオブジェクトです。ターゲットは XXX のインスタンスになり、セレクターは に@selector(setName:)なり、オブジェクトは になります@"Steve"

その情報を保存することにより、元に戻すスタックがポップさ-setName:れた場合、@"Steve" の値でオブジェクト XXX のインスタンスを呼び出し、その状態を復元します。KVO などに関していくつかの追加作業が行われていますが、それが基本です。

NSManagedObjectID最初に、 、セレクター ( を使用NSStringFromSelector)、およびオブジェクトをディスクに書き出し、 を呼び出すことでそれらを復元できると理論付けました-registerUndoWithTarget: selector: object:。ただし、ドキュメントをさらに確認すると、スタックにアクセスして反復処理する方法はありません。

于 2010-01-02T16:14:01.067 に答える
0

個別のNSManagedObjectContextを使用することで、1つの回避策が存在することに注意してください。シャットダウン時に保存されるものと、変更がロールバックされるものがあります。それは完璧ではありませんが、私はこの代替案で私の問題に対する適切な解決策を見つけました。

于 2010-02-23T15:35:18.650 に答える