Как воссоздать xcdatamodeld

Я поддерживаю приложение, которое уже несколько месяцев находится в AppStore. Мое приложение использует Core Data, и каким-то образом мне удалось потерять все предыдущие версии моей модели xcdatamodel.

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

Судя по всему, я модифицировал оригинальный xcdatamodel. Итак, когда я тестирую миграцию, она завершается ошибкой с кодом = 134130 «Не удается найти модель для исходного хранилища». Поскольку приложение работает нормально, когда на устройстве/симуляторе нет файла sqlite, я пришел к выводу, что исходная модель xcdata была изменена.

Предполагая, что моя логика до сих пор верна, как я могу создать xcdatamodel, которая будет соответствовать файлам sqlite на устройствах моих пользователей. Для них неприемлемо потерять свои данные.

Спасибо.


person Blamdarot    schedule 25.09.2012    source источник


Ответы (2)


Открыв файл модели Core Data (например, пустой), выберите Editor -> Import, а затем найдите файл .mom из предыдущей версии вашего приложения.

См. этот ответ.

person Amy Worrall    schedule 25.09.2012
comment
Каким-то образом все предыдущие версии были утеряны. Я использовал GIT, снимки и даже Dropbox, но у меня есть только текущая версия файла. - person Blamdarot; 25.09.2012
comment
@Blamdarot, что случилось с твоим репозиторием git? - person Carl Veazey; 25.09.2012
comment
Получите файл мамы из своего приложения доставки из магазина приложений. - person Amy Worrall; 26.09.2012
comment
@AmyWorrall, как и где получить файл .mom? - person ViruMax; 02.09.2014

Согласно основным данным Apple рекомендации по управлению версиями, две версии Core Data считаются идентичными, если:

  • Для каждой сущности должны быть равны следующие атрибуты: name, parent, isAbstract и properties. className, userInfo и предикаты проверки не сравниваются.

  • Для каждого свойства в каждой сущности должны быть равны следующие атрибуты: name, isOptional, isTransient, isReadOnly, для атрибутов attributeType и для отношений destinationEntity, minCount, maxCount, deleteRule и inverseRelationship.

Если ваша текущая xcdatamodel является совершенно новым файлом, я не думаю, что все, что вы делаете, приведет к совпадению исходной и текущей версии. Однако, если текущая версия является случайно измененной исходной версией, вы можете взглянуть на свои старые сгенерированные файлы модели и попытаться выяснить, что изменилось.

Например: в модели у вас было свойство «NSString * age», но в вашей текущей xcdatamodel это свойство «NSNumber * age».

Кроме того, помните, что ошибка, которую вы видите, может быть вызвана сгенерированными файлами моделей, которые не синхронизированы с БД, поэтому попробуйте создать их заново.

person Breno Gazzola    schedule 25.09.2012
comment
Как посмотреть на старые сгенерированные файлы моделей? - person Blamdarot; 25.09.2012
comment
Вы создаете сгенерированные файлы модели, когда щелкаете Entity в своей модели xcdata, а затем выбираете Editor -> Create NSManagedObject subclass. Если вы используете систему управления версиями (Xcode имеет интеграцию с GIT), вы можете получить более старую копию оттуда. Если нет, вы можете попробовать найти его в своей машине времени (если она активирована на вашем Mac). В противном случае вы сказали в своем исходном сообщении, что мне удалось потерять все предыдущие версии моей xcdatamodel. Везде, где у вас были эти версии xcdatamodel, у вас должны быть предыдущие версии сгенерированных вами файлов модели. - person Breno Gazzola; 25.09.2012