Перенос iPhone CoreData не удается: «Не удается найти модель для хранилища источников»

У меня есть приложение iPhone, которое использует CoreData. Недавно я внес некоторые незначительные изменения в модель данных, и теперь каждый раз, когда приложение открывается, я получаю сообщение об ошибке «Не могу найти модель для исходного хранилища».

У меня есть 2 версии модели данных, и только изменения, которые я сделал, были некоторыми дополнениями некоторых полей. Я следил за гидом, который работал сначала, а затем только сегодня, после добавления некоторых дополнительных полей, он ломается. Все дополнительные поля помечены как необязательные, и все они имеют значения по умолчанию. Код перехода ниже:

NSURL *storeUrl = [NSURL fileURLWithPath:[[self applicationDocumentsDirectory] stringByAppendingPathComponent:@"xxx.sqlite"]]; // migration options NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys: [NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption, [NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil]; NSError *error = nil; persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]]; if (![persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeUrl options:options error:&error]) { ... } 

Команда managedObjectModel успешно создана здесь:

 - (NSManagedObjectModel *)managedObjectModel { if (managedObjectModel != nil) { return managedObjectModel; } NSString *path = [[NSBundle mainBundle] pathForResource:@"DataModelName" ofType:@"momd"]; NSURL *momURL = [NSURL fileURLWithPath:path]; managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:momURL]; return managedObjectModel; } 

Я отследил проблему до несоответствия в версии для 1 объекта. Ошибка, которая возникает, включает это для объекта:

 MyEntityName = <cc1456b7 b12d0d05 21930308 94ccc078 27a6c345 8847c738 e3a9ae7e 0be9535d>; 

но хэш в VersionInfo.plist в комплекте приложения:

 MyEntityName = <fede6b59 462442d1 8fc98226 b9f8f745 3250dabd ee188248 cb97b1d0 8a74eef3>; 

Других объектов в версии VersionInfo.plist нет с хешем <cc1456b7....> .

2 Solutions collect form web for “Перенос iPhone CoreData не удается: «Не удается найти модель для хранилища источников»”

Из связанного ответа,

Это кажется замечательным и простеньким, как я хотел – но я думаю, что вам нужно быть осторожным во время разработки, поскольку вы меняете модель, иначе вам придется создавать новую версию для каждого изменения.

Похоже, вы сделали версию 2, отредактировали версию 2, снова запустили приложение, отредактировали версию 2 и снова запустили приложение. Это не работает так хорошо; вам нужно сохранить все версии моделей, которые вы ожидаете открыть. Это немного хлопот.

Что вы можете сделать, это назвать все ваши модели после версий приложений, например, FooModel-1 и FooModel-1.1, соответствующие выпускам, и FooModel-1.2d1, FooModel-1.2d2 для версий «разработки». Перед выпуском вы можете переименовать FooModel-1.2d10 в FooModel-1.2 и удалить другие версии для разработки.

(Или я мог бы полностью неправильно понять вопрос, извините).

Ну, в моем случае точно то же самое происходило, и я был на iOS 7, и эта проблема прикрутила мою голову хотя бы на неделю, а затем, наконец, нашла решение, которое работает для меня. Чтобы заставить его работать, вы должны добавить дополнительное значение в опции, которые используются для добавления PersistentStore, а затем вы идете (я не уверен в другой версии iOS, но да, это определенно будет работать на iOS 7).

 -(NSManagedObjectModel *)managedObjectModel { if (managedObjectModel != nil) { return managedObjectModel; } managedObjectModel = [NSManagedObjectModel mergedModelFromBundles:nil]; return managedObjectModel; } -(NSPersistentStoreCoordinator *)persistentStoreCoordinator { if (persistentStoreCoordinator != nil) { return persistentStoreCoordinator; } NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"ABC.sqlite"]; NSError *error = nil; persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] ini tWithManagedObjectModel:[self managedObjectModel]]; //Creating Lightweight migration. NSDictionary *options = @{ NSMigratePersistentStoresAutomaticallyOption:@YES ,NSInferMappingModelAutomaticallyOption:@YES ,NSSQLitePragmasOption: @{@"journal_mode": @"DELETE"} }; if (![persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:options error:&error]) { NSLog(@"Unresolved error %@, %@", error, [error userInfo]); abort(); } return persistentStoreCoordinator; } 
  • С NSDictionary вы можете определить тип данных значения?
  • Новые литералы Objective-c в 4.4
  • Преобразование изображения в CVPixelBuffer для машинного обучения Swift
  • Повторная ячейка имеет UIView из предыдущей ячейки
  • Скомканная бумага анимация UIView
  • фильтрация одиночных и двойных кранов
  • Каков наилучший способ вызова IBAction с помощью кода?
  • (разрешено) Переменный набор в инициализаторе TableView забывается при вызове numberOfRowsInSection
  • установить выравнивание заголовка панели навигации
  • Почему это так дорого в Swift по сравнению с просто ... оставляя его как AnyObject?
  • Показывать изображение в блоке предупреждения локального уведомления
  • Interesting Posts

    Скрыть выходы из Connections Inspector для пользовательского просмотра

    Может ли код запуска локального уведомления в iOS8?

    UITableViewCell селектор setSelected: анимированный: вызывается много раз?

    Как добавить действие для UIButton

    Не удалось найти код, в котором произошел сбой в отчете о сбое xcode

    Ошибка установки pod с ошибкой: Библиотека (из `../`) `требуется` Подфайл`, когда pod install в iOS

    что такое код, чтобы определить, работает ли приложение iOS на iPhone, iPhone Retina или iPad?

    Как я могу передать фильм в iOS и воспроизвести его из файловой системы позже?

    Сброс быстрого приложения через 10 минут

    Как исправить ошибку «Нет памяти, доступной для программы сейчас: небезопасно для вызова malloc»?

    LinkedIn iOS SDK Bundle Suffix

    Как перемещать представление по изогнутому пути в iOS

    Могу ли я поворачивать UIView без черных полос?

    NSFileManager.defaultManager (). FileExistsAtPath возвращает false вместо true

    Дата NSCalendarFromComponents возвращает неверную дату на 2

    PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.