تطبيق قائم على مستندات البيانات الأساسية مع المتجر العالمي المستمر

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

سؤال

لقد حصلت على تطبيق بيانات أساسي قائم على المستندات يعمل كما هو. أرغب في إضافة دعم لمتجر عالمي مستمر للاحتفاظ بمكتبة من العناصر.

لقد قرأت معظم المستندات ذات الصلة ، وأفهم أنه يجب علي استخدام التكوينات في نماذج الكائنات المدارة. لقد حددت تكوينين: "DocumentConfiguration" و "LibraryConfiguration". الكيانات الموجودة في تكوين المستند هي فقط في تكوين المستند ، والكيانات في تكوين المكتبة هي فقط في تكوين المكتبة - أي ، لا تداخل.

ثم تقول المستندات "يمكنك استخدام هذا النموذج عند إنشاء منسق". لكنني لا أقوم بالفعل بإنشاء منسق المتجر الثابت الخاص بي لأنني أستخدم منسق NSPERSEFFAINTDOCINGUME الافتراضي.

بعض الأسئلة حول أفضل طريقة للمتابعة والمساعدة في توضيح أي سوء فهم قد يكون لدي:

أ. هل سأحصل على nspersistressstorecooripinator في nspersistraftDocument ثم أضف متجرًا ثابتًا جديدًا على غرار:

NSPersistentStoreCoordinator * coordinator = [[myDocument managedObjectContext] persistentStoreCoordinator];
[coordinator addPersistentStoreWithType:NSXMLStoreType 
    configuration:@"LibraryConfiguration" 
    URL:url 
    options:nil 
    error:&error];

أعتقد أن هذا قد يكون مشكلة لأنني لم أقم بتقديم تعريف التكوين الآخر ("DocumentConfiguration") في منسق المتجر المستمر لـ NSPERNESSDOCINGUSE لأنني أستخدم الافتراضي الذي توفره NSPERSINGTDOCINGUME. أظن أنه من المحتمل أن يستخدم NIL عندما يحين الوقت لحفظ المستند. وإذا كان الأمر كذلك ، فهل ستكون هذه مشكلة؟ أي كيف يمكن للمنسق معرفة المتجر الثابت الذي يحفظ كيان مع تعريف تكوين معين إذا لم يتم تعريف التكوينات نفسها لجميع المتاجر المستمرة (في هذه الحالة الثانية)؟ هل يمكنني تعيين التكوين (إلى "DocumentConfiguration") لمتجر NSPERSSESSERDOCINGUME المستمر قبل إنشائه/حفظه؟ من مستندات nspersistraftdocument:

يضيف حفظ مستند جديد متجرًا للنوع الافتراضي مع عنوان URL المختار واستدعاء حفظ: في السياق. للحصول على مستند موجود ، فإن الحفظ فقط يستدعي حفظ: في السياق.

ب. هل سيكون من الأفضل إنشاء مثيلات nspersistraftstoreCooripinator ومحالات nsmanagedobjectContext ، مضيفًا اثنين من المتجرتين الثابتتين مع تكوينات محددة ، ثم جعل nspersistressDocument تستخدم هذه nspersistratestorecoordinator و NSmanagedObjectContext ، وحرر الحالات القديمة؟ إذا كان الأمر كذلك ، كيف يمكنني تحديد عنوان URL لـ nspersistraftDocument for the AddPersistentStoreWithTytype: ... الطريقة؟ يبدو أن عنوان URL هذا معروف فقط بمجرد حفظ المستند بدون عنوان. (اختبار هذا ، لا يبدو أن هناك أي متجر مستمر مؤقت (عبر الطريقة المستمرة للمنسق المستمر) حتى يتم حفظ المستند لأول مرة).

ج. أم أنه من الأفضل ترك nspersentergedocument بمفردها ، وإنشاء مثيل الخاص بي nspersistressstorecoordinator الذي أستخدمه حصريًا لمتجر المكتبة المستمر ونموذج كائن المكتبة المدارة؟ تقول المستندات أنه يجب استخدام مثيلات متعددة من NSPERSESSERTSTORECOORINATOR في تطبيقات البيانات الأساسية المتعددة ، لكنني لا أحتاج إلى دعم البيانات الأساسية متعددة التشققات. هل من المرغوب فيه أن يكون لديك حالتان من nspersistressstorecoordinator - واحدة للمكتبة وواحدة للوثائق (يقول الحدس أن هذا ليس ضروريًا وربما ليس النهج الصحيح)؟

أي اقتراحات؟

هل كانت مفيدة؟

المحلول

يعتمد الحل الذي استخدمته بشكل جيد على C) أعلاه. أترك nspersentergedocument ومنسق المتجر الثابت وحده ، وبدلاً من ذلك ، قم بإنشاء مثيل nspersistrafststorecoordinator الخاص بي والذي أستخدمه حصريًا لمتجر المكتبات المستمر (المتجر العالمي).

يمكنني تعيين التكوين للمتجر على قيمة مخصصة في حال أردت أن يكون لدي العديد من المتاجر المرتبطة بمنسق المتجر المستمر لاحقًا (على سبيل المثال ، "تكوين المكتبة"). نظرًا لأن متجر المكتبة يديره منسق المتجر المستمر يختلف عن منسق المتجر المستمر لـ NSPERNESSDOCISTER ، لست بحاجة إلى القلق بشأن تحديد تكوين لمخازن NSPERSESSINGDOCINGUSE المستمرة.

نصائح أخرى

تحتاج إلى إنشاء متجر مستمر منفصل لكل تكوين. هذا هو ما هو التكوين ، للسماح لك بتخزين كيانات مختلفة في نموذج البيانات نفسه في ملفات ثابتة منفصلة.

من الخطأ الشائع هنا أن ينسى أن منسق المتجر المستمر يمكن أن يكون له عدد تعسفي من المتاجر المستمرة. كل ما عليك فعله هو تكرار Apple Boilerplate لإنشاء متجرين ثابتتين بأسماء و/أو مواقع مختلفة وكل منهما اسم تكوين مختلف. ثم أضف كلاهما إلى منسق المتجر المستمر.

وقد انتهيت. ستذهب مثيلات الكيان لكل تكوين إلى المتجر الصحيح.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top