سؤال

هذا متابعة من مشاكلي السابقة هنا. إعادة تعيين محاكاة حل جميع مشاكلي من قبل ، وذهبت لإكمال تطبيقي.

لدي الآن نفس المشكلة بالضبط عند تثبيت التطبيق على جهاز iPhone الخاص بي. يلتقط إصدارًا قديمًا من قاعدة البيانات الخاصة بي ، والذي لا يحتوي على الكيان الثاني فيه ، ويتعطل عندما أحاول الوصول إلى الكيان الثاني:

2010-04-22 23:52:18.860 albumCloud[135:207] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '+entityForName: could not locate an NSManagedObjectModel for entity name 'Image''
2010-04-22 23:52:18.874 albumCloud[135:207] Stack: (
  843263261,
  825818644,
  820669213,
  20277,
  844154820, 
  16985,   
  14633,   
  844473760,   
  844851728,   
  862896011,   
  843011267,   
  843009055,   
  860901832,   
  843738160,   
  843731504,   
  11547,   
  11500   
 )

terminate called after throwing an instance of 'NSException'

لدي سؤالان:

1) كيف يمكنني حذف تطبيقي تمامًا بما يكفي من هاتفي الذي يزيل البيانات القديمة؟ (لقد جربت حتى الآن حذف التطبيق العادي ، والحذف ، ثم حمل المنزل وقوة إعادة التشغيل ، ولعن التطبيق وتهديده أثناء تشغيله ... كل شيء)

2) كيف يمكنني منع حدوث ذلك عندما يكون طلبي في متجر التطبيقات ، وأقرر لسبب ما أنني أرغب في إضافة كيان آخر إلى المتجر ، أو سمة أخرى إلى الكيانات الموجودة؟ هل هناك طريقة "إذا لم تكن موجودة ثم قم بإنشائها"؟

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

المحلول

لحذف التطبيق بالكامل ، يجب أن يعمل حذفه بالطريقة المعتادة ، أي أن الضغط على ذلك حتى يتشحى والنقر فوق زر الحذف. ثم الاتصال بـ iTunes. قد يكون iTunes استعادة التطبيق وبياناته الاحتياطية في كل مرة.

لدعم إضافة كيانات جديدة لاحقًا ، تريد استخدام الإصدار والترحيل التلقائي للوزن الخفيف الموصوف هنا:

http://developer.apple.com/iphone/library/documentation/cocoa/conceptual/coredataversioning/articles/vmlightweight.html#//apple_ref/doc/uid/tp40008426-sw1

في الأساس تقوم بإنشاء إصدار جديد من نموذج البيانات الخاص بك باستخدام Design->Data Model عنصر القائمة في Xcode (محرر-> "إضافة إصدار نموذج" في XCode 4) ، ثم قم بإجراء بعض التغييرات في التعليمات البرمجية. سيؤدي ذلك إلى ترحيل البيانات الأساسية تلقائيًا نموذجًا قديمًا إلى النموذج الأحدث. أنت محدود في أنواع التغييرات التي يمكنك إجراؤها. يمكنك إضافة كيانات جديدة ، وإما إضافة سمة اختيارية إلى الكيانات الموجودة ، أو سمات مطلوبة مع تعيين القيم الافتراضية.

الشيء الوحيد الذي اكتشفني هو أن الطريقة التي تقوم بتحميلها للبيانات الأساسية NSManagedObjectModel يتغير عندما تريد استخدام الإصدار والترحيل. بدون ترحيل ربما يكون لديك هذا:

NSManagedObjectModel *model = [NSManagedObjectModel mergedModelFromBundles:nil];

بمجرد البدء في استخدام الإصدار والترحيل ، يحتاج هذا إلى التغيير إلى شيء مثل هذا:

NSString *path = [[NSBundle bundleForClass:self.class] pathForResource:@"DataModelName"
                                                                ofType:@"momd"];
NSURL *url = [NSURL fileURLWithPath:path];
NSManagedObjectModel *model = [[[NSManagedObjectModel alloc] initWithContentsOfURL:url] autorelease];
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top