البيانات الأساسية: nsmanagedObjectContext حفظ التعطل مع المحدد غير المعترف به

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

سؤال

أحاول إضافة بيانات أساسية إلى تطبيق موجود ، وهو أمر ليس من السهل بالنظر إلى أن جميع الوثائق وكل تعليمي يبدأ بإنشاء تطبيق يستخدم البيانات الأساسية من البداية. لذلك أحاول تحويل فئة النماذج الموجودة ليكون كيان بيانات أساسي. هذا ما فعلته:

  1. إضافة إطار البيانات الأساسية.
  2. إضافة ملف xcdatamodel. لقد أظهر لي مربع حوار يمكنني من خلاله إضافة فصل موجود ، لذلك أضفت طرازتي. ثم قمت بتعديل السمات وقلت لها ما هي الأنواع.
  3. بدلاً من إنشاء فئة نموذجية جديدة (بما أن لدي بالفعل واحد) قمت بإنشاء مشروع اختبار لمعرفة شكله ، وتعديل صفي لمطابقة. وشمل ذلك تغييره إلى ورث من NSManagedObject ، وتغيير خصائقي إلى ديناميكية ، وإزالة مكالمات الإصدار ، إلخ.
  4. تمت إضافة كائنات البيانات الأساسية إلى مندوب التطبيق الخاص بي ، بعد ذلك هذا المثال.
  5. في ViewController الخاص بي ، حيث اعتدت على تخصيص النموذج الخاص بي ، قمت بتغييره إلى

    MyModel *model = (MyModel*)[NSEntityDescription insertNewObjectForEntityForName:@"MyModel"] inManagedObjectContext:[delegate managedObjectContext];
    

لاحظ أن المندوب هو إشارة إلى مندوب التطبيق الخاص بي ، تم الإعلان عنه سابقًا. ربما ليست هذه هي الطريقة الذكية للقيام بذلك.

بعد تعيين جميع الخصائص ، لدي:

    [[delegate managedObjectContext] save:&error];

يعطل هذا الخط ، ويقول الخلفية إنه في الداخل [NSSqlLiteConnection execute], ، حوالي 8 مستويات داخل وظيفة حفظ. الاستثناء هو:

*-[NSConcreteValue UTF8String]: unrecognized selector sent to instance*

ما هي هذه القيمة الملموسة؟ ولماذا يتم استدعاء هذا من قبل من؟ إذا كان الأمر مهمًا ، فإن رمز إنشاء / حفظ النموذج الخاص بي موجود داخل وظيفة ، فهذا رد رد على NSNotification. هل هذا في موضوع منفصل؟ سمعت أن ManagedObjectContext ليس آمنًا. لكنني لا أحصل على نفس الخطأ الذي أتوقعه في هذه الحالة.

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

المحلول

حسنًا ، أنا متأكد تمامًا من أن لديك خاصية تم إعلانها على أنها NSString على نموذج قاعدة البيانات الخاص بك (.xcdatamodel) تم الإعلان عنه كشيء آخر (ربما رقم nsnumber) على نموذج الكائن الخاص بك. عند تجميع التعليمات البرمجية الخاصة بك ، لا يتم إنشاء أي تحذيرات ، ولكن عندما تحاول Coredata حفظ MOC (أي: كتابة البيانات على المتجر المستمر ، ويعرف أيضًا باسم قاعدة بيانات SQLite الخاصة بك) ، فإنه يفشل عندما يحاول Coredata تحويل NSString المفترض إلى ترميز UTF8.

يجب عليك التحقق من خصائصك على كل من نموذج قاعدة البيانات ونموذج الكائن.

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