0

http://www.mac-developer-network.com/columns/coredata/may2009/をガイドとして使用して、複数のスレッド/ NSManagedObjectContextsを利用するオブジェクトインポート機能に取り組んでいます(iPhone用に開発していることに注意してください)。

何らかの理由で、mergeChangesFromContextDidSaveNotificationの呼び出しをコメントアウトした場合でも、コンテキストの1つを保存すると、もう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コンボ全体を実行していなくても、メインコンテキストにテストコンテキストからの新しいオブジェクトが突然含まれます。

私の理解では、明示的に行われない限り、変更はマージされません...誰かがここで何が起こっているのか知っていますか?

4

1 に答える 1

1

私の理解では、明示的に行わない限り、変更はマージされません...

それは正しくありません。あなたがメインコンテキストで5)再フェッチした後だと思いますよね?Artistsフェッチは常にディスクに送られ、ファイルにアクセスします。別のコンテキストから保存した後の場合は、作成したばかりの新しいエントリがフェッチされます。競合がある場合は、あなたに従って対処されます。このAppleドキュメントmergePolicyを参照してください。

于 2010-03-19T04:59:46.410 に答える