Перенос 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; } 
  • Установка рамки UIView не работает
  • Как использовать XCTest для проверки того, не настроен ли плагин navigationBar на определенный цвет в объекте-C?
  • Лучшая практика скрыть схему URL от конечных пользователей
  • Как установить непрозрачное 1px изображение высокой тени для UINavigationBar?
  • Есть ли способ изменить высоту UINavigationBar в Storyboard без использования UINavigationController?
  • Интерактивные переходы между диспетчерами?
  • iPhone: как конвертировать фотографию в рисунок карандаша
  • Уменьшите использование памяти в приложении iOS без утечек
  • Схема UICollectionView Flow не имеет фиксированной высоты строки
  • Удалить подчеркивание на UIButton в iOS 7
  • UILongPressGestureRecognizer не будет реагировать на touch & HOLD
  • Interesting Posts

    Переходный стиль при использовании setViewControllers: анимированный: на UINavigationController

    Как остановить UITableView от возврата в верхнюю ячейку после popover

    Замедляет симулятор сетчатки IPad 6.0

    Обнаружение (прослушивание) изменения аудио маршрута в iOS 7

    вращающийся MKMapView

    Наследование: ограничение, а не расширение?

    Можно ли создать динамическую сетку с использованием iOS AutoLayout?

    проблема при вставке данных в базу данных sqlite

    Добавить UISearchBar в UINavigationBar с помощью UIBarButtonItem

    Следует ли регулярно проверять подписку на iOS, не обновляющую подписку?

    Определите, как сильно вращается CALayer

    Как удалить красные глаза с изображения в iPhone?

    Являются ли жестко закодированные математические операции выполняемыми во время компиляции или времени выполнения в Objective-C в Xcode?

    Удалить градиент на UINavigationBar

    Почему приложение iOS только правильно определяет текущий язык при первом запуске?

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