المشكلة مع كسكودي ولدت البيانات الأساسية رمز كومة المنطق البيانات الأساسية نموذج التعليمات البرمجية

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

  •  05-07-2019
  •  | 
  •  

سؤال

في التعليمات البرمجية التي تم إنشاؤها للحصول على البيانات الأساسية المكدس, حفظ على managedObjectContext يسمى في applicationWillTerminate الأسلوب.هذا هو أن تأخذ الرعاية من جميع الكائنات غير محفوظة في سياق قبل الخروج.

هذه الآثار الجانبية غير المرغوب فيه من إنقاذ أي الكائنات المؤقتة أيضا.(هذه المشكلة واضحة في أبل عينة رموز كذلك.إذا كنت انقر على + إضافة صفة جديدة في وصفة نموذج التعليمات البرمجية ثم اضغط على زر المنزل إلى إنهاء التطبيق نصف به صفة الكائن مرئيا عند بدء تشغيل التطبيق في المرة القادمة).

ما هو التصميم المفضل نمط التعامل مع هذه المسألة ؟ يمكنني أن أفكر في ما يلي.

  1. استخدام مختلف المسودة managedObjectContext المؤقتة الأشياء عندما تقرر حقا حفظ ، ثم دفع نسخة في الرئيسية managedObjectContext.دعوة لإنقاذ فقط على الرئيسية managedObjectContext في applicationWillTerminate.(هل هناك أي طريقة سهلة وسريعة لنقل كائن من managedObjectContext إلى آخر وبصرف النظر عن خلق نسخة يدويا في السياق الجديد؟)
  2. إزالة حفظ من applicationWillTerminate, ولكن التأكد من أن جميع الكائنات يتم حفظها مباشرة بعد إجراء التغييرات.(ربما هذا ليس سهلا في كل وقت لدي كلفه تطبيق مستخدم قد بدأت عمليات التحرير في نفس الوقت).

اسمحوا لي أن أعرف إذا كان هناك طريقة أفضل للتعامل مع هذا.

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

المحلول

الحل 1 لا لا يستلزم نسخ الكائنات.النمط هو موضح في CoreDataBooks على سبيل المثال.يمكنك إنشاء كائنات جديدة في السياق الثاني ، ثم خطأ منهم في السياق الرئيسي إما مباشرة (باستخدام objectWithID:) أو (كما هو موضح وأوضح في المثال) من خلال مراقبة NSManagedObjectContextObjectsDidchangenotification ودمج التغييرات في الخاص بك الرئيسية السياق.

نصائح أخرى

الحل 1 يستتبع كامل نسخ الكائنات.ومع ذلك, نسخ كائن صعب.خصائص يمكن التعامل معها بسهولة ، ولكن علاقات خفية.لنسخ العلاقات (نسخة عميق وليس سطحي واحد) تحتاج إلى إجراء العودية التي عليك دائما أن تأخذ الرعاية من أن كنت لا النسخ مرة أخرى نفس الكائن مرارا وتكرارا إذا اجتمع من أي وقت مضى مرة أخرى خلال العودية الخطوة.

الحل 2 قد يكون من الأسهل لتنفيذ اعتمادا على التطبيق الخاص بك والمنطق ، كما ذكرت ، واجهة المستخدم الرسومية.

هناك احتمال ثالث على التعامل بشكل صحيح الكائنات المؤقتة على النحو التالي.إضافة خاصية منطقية إلى الكيان المرتبطة بها إلى الأشياء الخاصة بك التي بتتبع حالة الكائن (مؤقت أو لا).ثم باستخدام أساليب NSManagedObjectContext

- (NSSet *)insertedObjects

يمكنك ببساطة تعداد مجموعة من الكائنات ، اعتمادا على قيمة منطقية العلم إما حفظ أو حذف الكائن.

لاحظ أن هذا قد يكون بالطبع مكلفة جدا اعتمادا على عدد من الكائنات.

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