iphone انشاء - النموذج المستخدم لفتح المتجر غير متوافق مع النموذج المستخدم لإنشاء المتجر





التي الاصدار (22)


يرجى حذف تطبيق من جهاز محاكاة وتنظيف رمز وتشغيل. تعمل بشكل جيد. قد يكون من مساعدة لك.

أنا خلقت نموذج البيانات الأساسية في xcode 3.2 وبعد الترقية في Xcode 4.2 ، ثم أضفت كيان جديد من فئة فرعية NSManagedObject (الرجوع إلى الكيان الجديد).

أول شيء ، يبدو غريباً لأنه ليس في نفس المجموعة القديمة. هنا هي الصورة على بلدي xcode 4.2 (AlkitabDB هو واحد أنا خلقت في xcode 3.2 ، EndeDB هو واحد جديد من الإصدار الحالي xcode (4.2):

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

هذا هو الخطأ:

2012-01-16 21:13:38.496 iHuria[55953:207] Unresolved error Error Domain=NSCocoaErrorDomain Code=134100 "The operation couldn’t be completed. (Cocoa error 134100.)" UserInfo=0x8829cd0 {metadata=<CFBasicHash 0x882a370 [0x1839b38]>{type = immutable dict, count = 7,
entries =>
    2 : <CFString 0x8829b90 [0x1839b38]>{contents = "NSStoreModelVersionIdentifiers"} = <CFArray 0x8829ff0 [0x1839b38]>{type = immutable, count = 0, values = ()}
    4 : <CFString 0x8829bc0 [0x1839b38]>{contents = "NSPersistenceFrameworkVersion"} = <CFNumber 0x8829770 [0x1839b38]>{value = +320, type = kCFNumberSInt64Type}
    6 : <CFString 0x8829bf0 [0x1839b38]>{contents = "NSStoreModelVersionHashes"} = <CFBasicHash 0x882a080 [0x1839b38]>{type = immutable dict, count = 1,
entries =>
    0 : <CFString 0x882a010 [0x1839b38]>{contents = "AlkitabDB"} = <CFData 0x882a030 [0x1839b38]>{length = 32, capacity = 32, bytes = 0xd02ac5f8be6ab0b39add450aca202ac0 ... 3d45d462998d2ccd}
}

    7 : <CFString 0x10e3aa8 [0x1839b38]>{contents = "NSStoreUUID"} = <CFString 0x8829e60 [0x1839b38]>{contents = "4F2EE7FF-463B-4055-BBED-8E603CDBDF59"}
    8 : <CFString 0x10e3948 [0x1839b38]>{contents = "NSStoreType"} = <CFString 0x10e3958 [0x1839b38]>{contents = "SQLite"}
    9 : <CFString 0x8829c40 [0x1839b38]>{contents = "NSStoreModelVersionHashesVersion"} = <CFNumber 0x6b1c7c0 [0x1839b38]>{value = +3, type = kCFNumberSInt32Type}
    10 : <CFString 0x8829c70 [0x1839b38]>{contents = "_NSAutoVacuumLevel"} = <CFString 0x882a0c0 [0x1839b38]>{contents = "2"}
}
, reason=The model used to open the store is incompatible with the one used to create the store}, {
    metadata =     {
        NSPersistenceFrameworkVersion = 320;
        NSStoreModelVersionHashes =         {
            AlkitabDB = <d02ac5f8 be6ab0b3 9add450a ca202ac0 ebd1e860 cbb578c2 3d45d462 998d2ccd>;
        };
        NSStoreModelVersionHashesVersion = 3;
        NSStoreModelVersionIdentifiers =         (
        );
        NSStoreType = SQLite;
        NSStoreUUID = "4F2EE7FF-463B-4055-BBED-8E603CDBDF59";
        "_NSAutoVacuumLevel" = 2;
    };
    reason = "The model used to open the store is incompatible with the one used to create the store";
}

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




سريعًا ، في AppDelegate.swift ابحث عن السطر

try coordinator!.addPersistentStoreWithType(NSXMLStoreType, configuration:  nil, URL: url, options: nil )

واستبدالها

try coordinator!.addPersistentStoreWithType(NSXMLStoreType, configuration: nil, URL: url, options: [NSMigratePersistentStoresAutomaticallyOption: true, NSInferMappingModelAutomaticallyOption: true])



كنت أتلقى الخطأ ولكن السبب في أنني حصلت على الخطأ كان بسبب ما يلي.

كان لدي في الأصل كيان واحد اسمه "Entry" وتم حفظ صف واحد لهذا الكيان في قاعدة البيانات. ثم أضفت كيانًا آخرًا يحمل الاسم "الشخص" وبعد إضافة ذلك ، تم إنشاءه وحصل على الخطأ. لذلك أنا حل المشكلة عن طريق حذف "شخص" الكيان ثم بناء التطبيق ، حذف الصف الذي كان في "دخول" ثم أغلق التطبيق. بعد ذلك ، حذفت التطبيق تمامًا من هاتفي ومن ثم قمت بإعادة البناء وعملت بشكل جيد. غير متأكد من الخطوة التي صححت المشكلة (حذف الصف أو التطبيق) ، ولكن نأمل إذا كنت تبحث عن حل سيساعدك ذلك. :)

تعديل: أوه وإذا كنت قلقًا بشأن حذف الكيان الجديد (في حالتي "شخص") لإنشاء التطبيق مرة أخرى ، فتذكر أنه يمكنك الحصول عليه مرة أخرى باستخدام CMD + Z!




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

إذا كانت هذه هي الحالة ، يجب عليك الاعتناء بترحيل البيانات القديمة إلى المخطط الجديد:

إصدار نموذج البيانات الأساسية وهجرة البيانات




إذا كنت تستخدم سويفت.

اتبع الإجابة من قبلStas وخيارات الإدراج ، بدلا من الصفر ، في مندوب التطبيق الخاص بك:

let myOptions = [NSMigratePersistentStoresAutomaticallyOption: true,
            NSInferMappingModelAutomaticallyOption: true]
        if coordinator!.addPersistentStoreWithType(NSSQLiteStoreType, configuration: nil, URL: url, options: myOptions, error: &error) == nil {



iOS Simulator -> Reset Contents and Settings ...

عملت بالنسبة لي

iOS Simulator -> Reset Contents and Settings ... -> Reset Works on iOS9 (xcode 7.1) أيضًا




في كل مرة تقوم فيها بإجراء تغيير على تعريف تاريخ Core ، يجب عليك حذف التطبيقات المثبتة على الجهاز الفعلي أو جهاز محاكاة.




إذا قمت بإجراء تغييرات على نموذج البيانات الأساسية الخاص بك ، يجب عليك تقديم سياسة ترحيل تخبر Core Data بكيفية اعتماد الكائنات الدائمة الموجودة (التي أنشأها المستخدمون باستخدام الإصدار الذي تم إصداره حاليًا) إلى النموذج الجديد.

بالنسبة لبعض السيناريوهات ، تتمكن Core Data من استنتاج رسم الخرائط تلقائيًا من النموذج القديم إلى النموذج الجديد. لمزيد من التغييرات المعقدة ، قد يتعين عليك تنفيذ بعض المنطق الذي ينفذ عملية الترحيل.

يمكن العثور على التفاصيل في developer.apple.com/library/ios/#documentation/cocoa/Conceptual/… .

تحديث
تغطي هذه الإجابة على أساسيات نقل البيانات الخفيف من Core Data كما تحتوي أيضًا على بعض التعليمات البرمجية التي تساعدك على البدء.




نعم فعلا. بمجرد حذف التطبيق على الجهاز الفعلي وإعادة بناءه يعمل.




أزل التطبيق من المحاكي وقم بإجراء تنظيف على مشروعك. يجب أن يزيل تلك القضايا. تأكد من أنك لا تعمل في مصحح الأخطاء عند حذف التطبيق وإلا لن يتم حذفه بشكل صحيح.

إذا كنت تريد التأكد من Users/INSERT_YOUR_USER_HERE/Library/Application Support/iPhone Simulator/ ، فتحقق من هذا الدليل Users/INSERT_YOUR_USER_HERE/Library/Application Support/iPhone Simulator/ لمجلد تطبيقك ، أسفل الإصدار الذي تقوم بتشغيله.

ملاحظة: هذا هو للتنمية فقط. للإنتاج ، تحتاج إلى تنفيذ نوع من الهجرة. Google "Core Data Migration" ، مع هجرة خفيفة الوزن هي أبسطها.




  1. وقف التطبيق من الجري.
  2. حذف التطبيق على جهاز محاكاة.
  3. Product -> Clean
  4. بناء ، تشغيل.



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

developer.apple.com/library/ios/#documentation/cocoa/Conceptual/…




حذف التطبيق هو في بعض الأحيان ليس هو الحال! اقتراح ، تم نشر تطبيقك بالفعل! لا يمكنك إضافة كيان جديد إلى قاعدة البيانات والمضي قدمًا - فأنت بحاجة إلى إجراء الترحيل!

بالنسبة لأولئك الذين لا يريدون البحث في الوثائق والبحث عن حل سريع:

  1. افتح ملف xcdatamodeld الخاص بك
  2. اضغط على المحرر
  3. اختر إضافة إصدار موديل ...
  4. إضافة إصدار جديد من النموذج الخاص بك (المجموعة الجديدة من datamodels المضافة)
  5. حدد الملف الرئيسي ، مفتش ملف مفتوح (اللوحة اليمنى)
  6. وتحت Versioned core data model إصدار Versioned core data model حدد الإصدار الجديد من نموذج البيانات لطراز البيانات الحالي
  7. هذا ليس كل شيء) يجب عليك القيام بما يسمى ب "الهجرة الخفيفة".
  8. انتقل إلى AppDelegate على المكان الذي يتم إنشاء persistentStoreCoordinator فيه
  9. ابحث عن هذا السطر if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error])
  10. استبدل خيارات nil بـ @{NSMigratePersistentStoresAutomaticallyOption:@YES, NSInferMappingModelAutomaticallyOption:@YES} (تم توفيرها بالفعل في التعليمة البرمجية التي تم التعليق عليها بهذه الطريقة)
  11. هنا تذهب ، والمتعة!

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

  • إضافة أو إزالة خاصية (سمة أو علاقة).
  • جعل خاصية nonoptional اختياري.
  • اجعل سمة اختيارية غير اختيارية طالما أنك تقدم قيمة افتراضية.
  • إضافة أو إزالة كيان.
  • إعادة تسمية خاصية.
  • إعادة تسمية كيان.



أولا ، الأشياء الوحيدة التي ينبغي أن تكون في حزمة xcdatamodel هي ملفات xcdatamodel . يجب ألا تكون الفئات الفرعية الخاصة بك في xcdatamodeld . نقل تلك من هناك. هناك فرصة عادلة بأنهم يربكون المترجم.

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




لقد قضيت عدة أيام في محاربة هذا الخطأ بالإضافة إلى تعطل merodModelFromBundles والحصول على "لا يمكن دمج النماذج مع كيانين مختلفين مسمى *".

وتبين أن المشكلة الأساسية هي أن Xcode لا يزيل الموارد القديمة من الأجهزة وكان لدي إصدارات قديمة من نموذج البيانات الخاص بي (ملفات .mom) التي تسببت في حدوث تعارضات. هذا هو السبب في أن حذف التطبيق يؤدي إلى إصلاح المشكلة على أحد أجهزتي.

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

NSManagedObjectModel *model = [NSManagedObjectModel mergedModelFromBundles:nil];

لهذا ، والتي لا تظهر إلا في دليل الفلاتر:

NSString *path = [[NSBundle mainBundle] pathForResource:@"Filters" ofType:@"momd"];
NSURL *momURL = [NSURL fileURLWithPath:path];
NSManagedObjectModel *model = [[NSManagedObjectModel alloc] initWithContentsOfURL:momURL];

اعتدت recursivePathsForResourcesOfType من هذا السؤال : للمساعدة في معرفة ذلك عن طريق تسجيل جميع ملفات .mom في التطبيق:

NSArray *momPaths = [self recursivePathsForResourcesOfType:@"mom" inDirectory:[[NSBundle mainBundle] resourcePath]];
NSLog(@"All .mom files:%@",momPaths);

أنا أيضا استخدام iExplorer للنظر في الملفات .mom الدخيلة (لم أحاول حذفها حتى الآن).

كانت الطريقة أدناه مفيدة أيضًا. أظهرت أن الكيان كان في النموذج المدمج الذي تم إرجاعه بواسطة [psc managedObjectModel] الذي لم يعد موجودًا في أي من موديلاتي أو في المتجر نفسه. كان هذا ما دعاني إلى الاعتقاد بأن نموذجًا قديمًا تم تخزينه مؤقتًا على الجهاز نفسه الذي لم يزيله المبنى النظيف. تسجل الطريقة كل كيان متماثل أو تم تغييره أو إضافته إلى أو إزالته من النموذج. (مكتوبة بجواب SO هذا كنقطة بداية):

- (BOOL)comparePersistentStore:(NSPersistentStoreCoordinator *)psc withStoreURL: (NSURL *)storeURL {
    NSError *error = nil;

    // Get the entities & keys from the persistent store coordinator
    NSManagedObjectModel *pscModel = [psc managedObjectModel];
    NSDictionary *pscEntities = [pscModel entitiesByName];
    NSSet *pscKeys = [NSSet setWithArray:[pscEntities allKeys]];
    //NSLog(@"psc model:%@", pscModel);
    //NSLog(@"psc keys:%@", pscKeys);
    NSLog(@"psc contains %d entities", [pscModel.entities count]);

    // Get the entity hashes from the storeURL
    NSDictionary *storeMetadata = [NSPersistentStoreCoordinator metadataForPersistentStoreOfType:NSSQLiteStoreType
                                                                                          URL:storeURL
                                                                                        error:&error];
    NSDictionary *storeHashes = [storeMetadata objectForKey:@"NSStoreModelVersionHashes"];
    //NSLog(@"store metadata:%@", sourceMetadata);
    NSLog(@"store URL:%@", storeURL);
    NSLog(@"store NSStoreUUID:%@", [storeMetadata objectForKey:@"NSStoreUUID"]);
    NSLog(@"store NSStoreType:%@", [storeMetadata objectForKey:@"NSStoreType"]);
    NSSet *storeKeys = [NSSet setWithArray:[storeHashes allKeys]];

    // Determine store entities that were added, removed, and in common (to/with psc)
    NSMutableSet *addedEntities = [NSMutableSet setWithSet:pscKeys];
    NSMutableSet *removedEntities = [NSMutableSet setWithSet:storeKeys];
    NSMutableSet *commonEntities = [NSMutableSet setWithSet:pscKeys];
    NSMutableSet *changedEntities = [NSMutableSet new];
    [addedEntities minusSet:storeKeys];
    [removedEntities minusSet:pscKeys];
    [commonEntities minusSet:removedEntities];
    [commonEntities minusSet:addedEntities];

    // Determine entities that have changed (with different hashes)
    [commonEntities enumerateObjectsUsingBlock:^(NSString *key, BOOL *stop) {
        NSData *storeHash = [storeHashes objectForKey:key];
        NSEntityDescription *pscDescrip = [pscEntities objectForKey:key];
        if ( ! [pscDescrip.versionHash isEqualToData:storeHash]) {
            if (storeHash != nil && pscDescrip.versionHash != nil) {
                [changedEntities addObject:key];
            }
        }
    }];

    // Remove changed entities from common list
    [commonEntities minusSet:changedEntities];

    if ([commonEntities count] > 0) {
        NSLog(@"Common entities:");
        [commonEntities enumerateObjectsUsingBlock:^(NSString *key, BOOL *stop) {
            NSData *storeHash = [storeHashes objectForKey:key];
            NSEntityDescription *pscDescrip = [pscEntities objectForKey:key];
            NSLog(@"\t%@:\t%@", key, pscDescrip.versionHash);
        }];
    }
    if ([changedEntities count] > 0) {
        NSLog(@"Changed entities:");
        [changedEntities enumerateObjectsUsingBlock:^(NSString *key, BOOL *stop) {
            NSData *storeHash = [storeHashes objectForKey:key];
            NSEntityDescription *pscDescrip = [pscEntities objectForKey:key];
            NSLog(@"\tpsc   %@:\t%@", key, pscDescrip.versionHash);
            NSLog(@"\tstore %@:\t%@", key, storeHash);
    }];
    }
    if ([addedEntities count] > 0) {
        NSLog(@"Added entities to psc model (not in store):");
        [addedEntities enumerateObjectsUsingBlock:^(NSString *key, BOOL *stop) {
            NSEntityDescription *pscDescrip = [pscEntities objectForKey:key];
            NSLog(@"\t%@:\t%@", key, pscDescrip.versionHash);
        }];
    }
    if ([removedEntities count] > 0) {
        NSLog(@"Removed entities from psc model (exist in store):");
        [removedEntities enumerateObjectsUsingBlock:^(NSString *key, BOOL *stop) {
            NSData *storeHash = [storeHashes objectForKey:key];
            NSLog(@"\t%@:\t%@", key, storeHash);
        }];
    }

    BOOL pscCompatibile = [pscModel isConfiguration:nil     compatibleWithStoreMetadata:storeMetadata];
    NSLog(@"Migration needed? %@", [email protected]"no":@"yes");

    return pscCompatibile;
}

الاستخدام: تمت الدعوة قبل إضافة كل متجر إلى NSPersistentStoreCoordinator:

    [self comparePersistentStore:self.psc withStoreURL:self.iCloudStoreURL];
    _iCloudStore = [self.psc addPersistentStoreWithType:NSSQLiteStoreType
                                          configuration:nil
                                                    URL:self.iCloudStoreURL
                                                options:options
                                                  error:&localError];



أنا فقط حذف [Simulator App Folder]/Document/*.sqlite ملف [Simulator App Folder]/Document/*.sqlite بعد إجراء تغييرات في الكيانات وعملها. وبطبيعة الحال ، يحتوي الملف .sqlite على كافة البيانات المخزنة والهياكل التي سيتم فقدانها.




عند تغيير البيانات الأساسية (إضافة حقل إلى جدول ، إزالة الحقل ، إلخ) ، يجب أن يكون ملف sqlite في مجلد مستندات التطبيقات متزامناً مع المخطط الخاص بك.

لا يتم الكتابة فوق هذا الملف بشكل افتراضي ، يجب إعادة إنشاء هذا الملف.

اتبع هذه الخطوات:

  1. انتقل إلى المجلد المشار إليه بواسطة NSURL. (يمكن العثور على هذا المسار في رسالة الاستثناء التي تم إنشاؤها بواسطة التطبيق قبل التعطل.) مثال: / Users // Library / Application Support / iPhone Simulator // Applications // Documents

  2. إزالة أو إعادة تسمية الملف sqlite

  3. قم بتنظيف ثم أعد تشغيل التطبيق
  4. سيؤدي تطبيق Rerunning إلى إنشاء ملف sqlite جديد.

سيعمل هذا على التأكد من أن المخطط و Xcode متزامنان.




ما عليك سوى إضافة سمة خيارات أثناء إنشاء persistentStoreCoordinator في ملف AppDelegate.m لأسلوب البيانات الأساسية على النحو التالي

ج موضوعية

- (NSPersistentStoreCoordinator *)persistentStoreCoordinator
{
    if (_persistentStoreCoordinator != nil)
    {
        return _persistentStoreCoordinator;
    }

    NSLog(@"persistentStoreCoordinator___");
    NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"MyApp.sqlite"];

    NSMutableDictionary *options = [[NSMutableDictionary alloc] init];
    [options setObject:[NSNumber numberWithBool:YES] forKey:NSMigratePersistentStoresAutomaticallyOption];
    [options setObject:[NSNumber numberWithBool:YES] forKey:NSInferMappingModelAutomaticallyOption];

    NSError *error = nil;
    _persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
    if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:options error:&error])
    {
        NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
        abort();
    }

    NSLog(@"persistentStoreCoordinator___2");
    return _persistentStoreCoordinator;
}

SWIFT

    lazy var persistentStoreCoordinator: NSPersistentStoreCoordinator = {
    // The persistent store coordinator for the application. This implementation creates and returns a coordinator, having added the store for the application to it. This property is optional since there are legitimate error conditions that could cause the creation of the store to fail.
    // Create the coordinator and store
    let coordinator = NSPersistentStoreCoordinator(managedObjectModel: self.managedObjectModel)
    let url = self.applicationDocumentsDirectory.URLByAppendingPathComponent("SingleViewCoreData.sqlite")
    var failureReason = "There was an error creating or loading the application's saved data."

    // MAIN LINE OF CODE TO ADD
    let mOptions = [NSMigratePersistentStoresAutomaticallyOption: true,
                    NSInferMappingModelAutomaticallyOption: true]

    do {
        try coordinator.addPersistentStoreWithType(NSSQLiteStoreType, configuration: nil, URL: url, options: mOptions)
    } catch {
        // Report any error we got.
        var dict = [String: AnyObject]()
        dict[NSLocalizedDescriptionKey] = "Failed to initialize the application's saved data"
        dict[NSLocalizedFailureReasonErrorKey] = failureReason

        dict[NSUnderlyingErrorKey] = error as NSError
        let wrappedError = NSError(domain: "YOUR_ERROR_DOMAIN", code: 9999, userInfo: dict)
        // Replace this with code to handle the error appropriately.
        // abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.
        NSLog("Unresolved error \(wrappedError), \(wrappedError.userInfo)")
        abort()
    }

    return coordinator
}

كان قد حل مشكلتي ..




جرِّب "إعادة تعيين المحتوى والإعدادات" في المحاكي. عملت لي بعد حذف التطبيق وبناء النظيفة




إن أبسط الحلول الذي نجحت به في Swift 2.1 ، Xcode 7 هو:

  1. حذف التطبيق من Simulator (Cmd + Shift + H للانتقال إلى الشاشة الرئيسية. اضغط مع الاستمرار على التطبيق ، انقر فوق ، فقط بالطريقة المعتادة لحذف تطبيق من هاتفك)

  2. Cmd + Shift + H مرة أخرى لإيقاف الرقص من التطبيقات

  3. ارجع إلى مشروعك ثم أعد تشغيله

واجهت هذه المشكلة أثناء الكتابة / القراءة من Core Data مع إعداد كيانين. أدى حذف التطبيق وإعادة تشغيل البرنامج إلى إصلاح المشكلة




لقد واجهت نفس المشكلة مع تطبيقي (لم يصدر بعد في App Store).

إليك كيف أصلحته:

  1. تشغيل Clean (Cmd + Shift + K)
  2. إعادة تشغيل iOS Simulator
  3. iOS Simulator -> Reset Content and Settings (from navbar)

(3) كانت الخطوة التي حصلت أخيرا لتشغيلها بشكل صحيح. أتمنى أن يساعدك هذا!




نعم هناك في الواقع مثال CoreDataBooks يفعل ذلك ، يمكنك تنزيل التعليمات البرمجية هنا: نموذج التعليمة البرمجية

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

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

- (NSPersistentStoreCoordinator *)persistentStoreCoordinator {

if (persistentStoreCoordinator) {
    return persistentStoreCoordinator;
}


NSString *storePath = [[self applicationDocumentsDirectory]      stringByAppendingPathComponent: @"CoreDataBooks.sqlite"];
 /*
  Set up the store.
 For the sake of illustration, provide a pre-populated default store.
 */
NSFileManager *fileManager = [NSFileManager defaultManager];
// If the expected store doesn't exist, copy the default store.
if (![fileManager fileExistsAtPath:storePath]) {
  NSString *defaultStorePath = [[NSBundle mainBundle] pathForResource:@"CoreDataBooks"      ofType:@"sqlite"];
 if (defaultStorePath) {
 [fileManager copyItemAtPath:defaultStorePath toPath:storePath error:NULL];
 }
}

NSURL *storeUrl = [NSURL fileURLWithPath:storePath];

 NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber   numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption, [NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil]; 
  persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel: [self managedObjectModel]];

 NSError *error;
 if (![persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeUrl options:options error:&error]) {
  // Update to handle the error appropriately.
  NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
 exit(-1);  // Fail
}    

return persistentStoreCoordinator;
}

امل ان يساعد.

-Oscar





iphone core-data xcode4