Основные данные - Не удалось загрузить оптимизированную модель по пути

Я получаю некоторые из этих отпечатков в моей консоли при запуске моего приложения из Xcode 6 в своем iPhone 6 с iOS 9 beta 5:

CoreData: Не удалось загрузить оптимизированную модель по пути '/var/mobile/Containers/Bundle/Application/0000000B-BDBC-0000-000B-0000FB00000B/Distribution.app/database.momd/database.omo'

Я не могу найти что-то, связанное с этим, может ли кто-нибудь понять это сообщение?

Ответ 1

Я столкнулся с этой проблемой и немного погубил.

Я строил с Xcode 6.4, и похоже, что ранее основные данные генерировали только файл .mom в каталоге MyApp.ipa momd. Этот снимок экрана сделан из проекта, который видел несколько версий Xcode.

Обратите внимание, что все старые версии модели имеют только файл .mom. Я только что создал новую версию модели сегодня, и она имеет как .mom, так и файл .omo.

введите описание изображения здесь

Похоже, что Xcode 6.4 (и, возможно, некоторые из версий бета 7.x) не знают, как загрузить оптимизированную версию модели данных, потому что я также получаю

2015-10-16 11:11:42.563 MyAppName[1767:599635] CoreData: Failed to load optimized model at path '/var/mobile/Containers/Bundle/Application/D887D60B-FB28-4059-8167-F573460D98F8/MyAppName.app/MyDataModel.momd/MyDataModel3_0Analytics.omo'

предупреждение при компиляции с 6.4. Однако при компиляции приложения с последней версией приложения Xcode (7.0.1) я не получаю этого предупреждения. Я предполагаю, что причина решения Mahesh заключается в том, что повторная запись всей схемы создает файл .omo, который приложение ищет в комплекте приложения.

Решение для меня состояло в том, чтобы сгенерировать новую версию модели данных в основных данных, а затем построить с помощью Xcode 7. Кажется, что создание новой версии модели создает оптимизированный файл модели. В моем тестировании, хотя даже с этим файлом, созданным Xcode 6.4, все еще выдается ошибка. Это было не до тех пор, пока я не попробовал его с Xcode 7.0.1, что предупреждение исчезло.

Это предположение, но я думаю, что если у вас есть существующий проект и вы не создали новую версию модели данных и не создаете с Xcode 7, что отсутствует файл .omo, он бросает предупреждение, потому что он не может найти файл. Однако, если вы проверили версию своей модели данных и создали с Xcode 6.4, кажется, что более ранняя версия Xcode не делает что-то правильно с оптимизированной версией, и она не загружает ее, даже если она есть. Это только мои наблюдения.

Я проверил, что у меня была оптимизированная модель (файл .omo) для загрузки, выполнив следующие действия:   1. архивируйте свой проект   2. измените расширение .ipa на .zip   3. Разверните свой zip файл   4. Нажмите на папку "полезная нагрузка" и щелкните правой кнопкой мыши (или см. Щелчок) в комплекте приложения в папке и выберите "Показать содержимое пакета".   5. щелкните по каталогу .momd, вы увидите все доступные модели управляемых объектов.

Если все, что у вас есть, это файлы .mom и файлы .omo, то предупреждение имеет смысл, приложение не может открыть файл, который не существует.

В моем тестировании кажется, что предупреждение было только информационным. Из-за этого я никогда не сталкивался с этим. Похоже, что данные ядра могут сначала попытаться загрузить оптимизированную модель, и если это не сработает, вернитесь к обычной модели .momd. Это всего лишь мое предположение.

Я не уверен, что все здесь совершенно правильно, это то, что я наблюдал до сих пор, пытаясь отладить это. Если кто-либо еще может внести дополнительную информацию, я приветствую ваш вклад.

Ответ 2

Я нашел решение для этого. Я переписал всю схему, и когда я запускаю код, я избавился от этих предупреждений из основных данных.

Я предлагаю выполнить резервное копирование, прежде чем вы попробуете это.

Надеюсь, это поможет вам.

Ответ 3

Я столкнулся с этой проблемой сегодня утром. Сделал небольшой взлом, чтобы заставить его работать. Я думаю, что это как-то связано с несоответствием версий, но я не уверен.

Во всяком случае, если вы загружаете файл momd, просто добавьте в NSURL "/[filename].mom", чтобы заставить его работать.

В моем случае я загрузил файл Countly.momd и в итоге сделал это:

// Original loading
NSURL modelURL = [[NSBundle bundleForClass:[CountlyDB class]] URLForResource:@"Countly" withExtension:@"momd"];

// Small hack
modelURL = [modelURL URLByAppendingPathComponent:@"Countly.mom"];

Обновление: Я использовал POD, который использовал CoreData. Удаление модуля и добавление источника и т.д. Из репо сразу заставило проблему уйти.

Таким образом, это может быть проблема.

Ответ 4

Я хочу ответить людям, которые столкнулись с этим, когда писал собственный блок, который имеет собственные модели CoreData. Вероятно, вы поместили определение модели в пакет (это хорошо), но вы ищете файл momd в неправильном комплекте.

Скажем, вы определили свой пакет в podspec следующим образом:

'MYPodBundle' => [
    'Model/*.{xcdatamodeld,xcdatamodel}'
]

Затем вы должны сначала найти этот комплект, а затем найти свою модель внутри нее.

NSURL *bundleURL = [[NSBundle bundleForClass:[MYEntity class]] URLForResource:@"MYPodBundle" withExtension:@"bundle"];
NSBundle *bundle = [NSBundle bundleWithURL:bundleURL];
NSString *modelPath = [bundle pathForResource:@"MYCoreDataModel" ofType:@"momd"];
NSManagedObjectModel *managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:[NSURL fileURLWithPath:modelPath]];

Итак, вы можете продолжить создание стека CoreData.

//Это может быть немного offtopic, потому что вы не пишете собственный модуль, но ваш ответ находится на google top.