明示的なマージを行わずに、ある NSManatedObjectContext から別の NSManagingObjectContext に変更が移入されるのはなぜですか?
-
20-09-2019 - |
質問
私は、複数のスレッド/NSManatedObjectContextsを利用するオブジェクトインポート機能に取り組んでいます。 http://www.mac-developer-network.com/columns/coredata/may2009/ 私のガイドとして(私はiPhone用に開発していることに注意してください)。
何らかの理由で、mergeChangesFromContextDidSaveNotification の呼び出しをコメントアウトしたにもかかわらず、コンテキストの 1 つを保存すると、もう一方のコンテキストがすぐに変更内容で更新されます。明示的な呼び出しなしでコンテキストが互いにマージされる理由はありますか?
何が起こっているかのログは次のとおりです。
// 1.) Main context is saved with "Peter Gabriel"
// 2.) Test context is created, begins with same contents as main context
// 3.) Main context is inserted with "Spoon"
// 4.) Test context is inserted with "Phoenix"
// Contents at this point:
CoreTest[4341:903] Artists in main context: (
"Peter Gabriel",
"Spoon"
)
CoreTest[4341:903] Artists in test context: (
"Peter Gabriel",
"Phoenix"
)
// 5.) testContext is saved
// New contents of contexts:
CoreTest[4341:903] Artists in main context: (
"Peter Gabriel",
"Phoenix",
"Spoon"
)
CoreTest[4341:903] Artists in test context: (
"Peter Gabriel",
"Phoenix"
)
ご覧のとおり、NSManagedObjectContextDidSaveNotification/mergeChangesFromContext のコンボ全体を実行していないにもかかわらず、テスト コンテキストが途中で保存され、メイン コンテキストに突然テスト コンテキストの新しいオブジェクトが追加されます。
私の理解では、明示的に行わない限り、変更はマージされないということです...ここで何が起こっているのか知っている人はいますか?
解決
私の理解では、明示的に行わない限り、変更はマージされないということです...
それは正しくありません。あなたの後だと思います 5)
再フェッチしました Artists
メインコンテキストではそうですよね?フェッチは常にディスクに送信され、ファイルにアクセスします。別のコンテキストから保存した後であれば、作成したばかりの新しいエントリがフェッチされます。競合がある場合は、あなたの要求に従って処理されます。 mergePolicy
, 、 見る この Apple ドキュメント.