لماذا قد يتم نشر التغييرات من NSManagedObjectContext إلى آخر دون دمج صريح؟

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

سؤال

أنا أعمل على ميزة استيراد الكائنات التي تستخدم عدة سلاسل/NSManagedObjectContexts، باستخدام http://www.mac-developer-network.com/columns/coredata/may2009/ كدليل لي (لاحظ أنني أقوم بالتطوير لجهاز iPhone).

لسبب ما، عندما أقوم بحفظ أحد السياقات الخاصة بي، يتم تحديث السياق الآخر على الفور بالتغييرات، على الرغم من أنني قمت بالتعليق على مكالماتي إلى mergeChangesFromContextDidSaveNotification.هل هناك أي أسباب قد تؤدي إلى دمج السياقات مع بعضها البعض دون دعوة صريحة؟

هنا سجل لما يحدث:

// 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