1

管理対象オブジェクト コンテキストのロール バック メソッドを使用して行った変更を破棄しましたが、問題が発生しました。異なるビュー コントローラーがあり、それぞれが異なるデータベース データに変更を加えることができ、最初のコントローラーがロール バック メソッドを実行すると、 2 番目のコントローラーによって行われた変更をロールバックしたくありません。とにかく特定のエンティティをロールバックするだけで、すべてではありませんか? または、複数の管理対象オブジェクト コンテキストを使用することになっていますか?

4

1 に答える 1

8

の部分的な変更セットのみをロールバックすることはできませんNSManagedObjectContext。あなたが話していることを行うための最良の方法NSManagedObjectContextは、親コンテキストの子である new を作成することです。保存すると、変更が親にプッシュされます (実際にディスクに保持するには、親コンテキストを保存する必要があります)。さらに、この方法で変更セットを分離するとrollback、子コンテキストを呼び出す必要さえなく、破棄するだけで済みます。

の親子関係を使用するにNSManagedObjectContextは、initWithConcurrencyType:メソッドですべてのコンテキストを初期化する必要があり、 または のいずれかを指定する必要NSPrivateQueueConcurrencyTypeがあることに注意してくださいNSMainQueueConcurrencyType。これは、コンテキストへのアクセス方法に影響を与えることに注意することが重要です。同時実行タイプが のコンテキストを使用してメイン キューにいない場合は、コンテキストとNSMainQueueConcurrencyType対話するすべてのメソッド呼び出しをブロック内に配置し、それをコンテキストperformBlock:またはperformBlockAndWait:メソッドに渡す必要があります。

このトピックに関するドキュメントはかなり薄いです。WWDC ビデオ以外で私が見つけた唯一のリファレンスは、この iOS 5 リリース ノート ドキュメントです。

于 2013-08-11T16:49:23.867 に答える