明示的なマージを行わずに、ある NSManatedObjectContext から別の NSManagingObjectContext に変更が移入されるのはなぜですか?

StackOverflow https://stackoverflow.com/questions/2472955

質問

私は、複数のスレッド/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 ドキュメント.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top