Предыдущая ошибка миграции основных данных

У меня есть приложение, в котором было много миграций основных данных, над проектом работали несколько разработчиков, и в какой-то момент оказалось, что не удалось правильно перенести основную модель данных. Конечным результатом является то, что люди, которые обновились с определенной версии приложения до текущей версии приложения, не могут сохранить свой контекст в магазине (это сохранение происходит, когда приложение переходит в фоновый режим).

Зарегистрированная ошибка выглядит следующим образом:

This NSPersistentStoreCoordinator has no persistent stores. It cannot perform a save operation.

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

В конечном итоге мой вопрос заключается в том, как мне решить эту проблему в будущем?

Моя идея состоит в том, чтобы выпустить незначительное обновление, которое полностью сбрасывает базовую постоянную модель данных. Сотрите все старые хранилища данных и начните заново (помните, что все данные поступают с сервера). Пользователь не потеряет данные, и это решит проблемы в будущем. Есть ли идея получше?

Кроме того, если бы я решил делать что-то именно так, как бы я поступил правильно? Могу ли я просто заглянуть в свой пакет и удалить все файлы .momd, а затем воссоздать новый с другим именем? Или удаление не нужно, и простое присвоение новых имен даст желаемые результаты?


person hatunike    schedule 26.08.2013    source источник
comment
Почему бы просто не исправить плохую миграцию?   -  person Wain    schedule 26.08.2013
comment
Это правильный вопрос. И, возможно, это могло бы стать поводом для отдельного вопроса. Но мне очень сложно определить, из какой версии исходит плохая миграция. Не могли бы вы дать мне какие-либо советы по обнаружению этого? И будет ли исправить эту плохую миграцию проще, чем предложенное мной решение? Как мне исправить плохую миграцию?   -  person hatunike    schedule 26.08.2013
comment
Вы используете контроль версий? Таким образом, вы можете начать с первой версии и постепенно проверять каждую версию и запускать ее, пока не обнаружите проблему.   -  person Wain    schedule 26.08.2013
comment
И как только проблема будет обнаружена, как я буду ее решать? Извините за мой нубский вопрос, у меня нет опыта ни с чем, кроме облегченной миграции ванили.   -  person hatunike    schedule 26.08.2013
comment
Примерно сколько данных необходимо загрузить, чтобы просто начать очистку? 10 КБ? 100Кб? 1 МБ?   -  person Tom Harrington    schedule 26.08.2013
comment
Это может варьироваться в зависимости от объема данных пользователя, но я только что провел небольшое тестирование, и мы обычно рассматриваем диапазон от 100 до 500 КБ.   -  person hatunike    schedule 26.08.2013


Ответы (1)


Для полного сброса вы можете добавить галочку в applicationDidFinishLaunching, которая:

  1. Проверьте наличие флага в пользовательских настройках по умолчанию, указывающего на то, что вы уже мигрировали.
  2. Если он не был перенесен, удалите текущий файл хранилища.
  3. Установите флаг в пользовательских настройках по умолчанию, чтобы в будущем больше не обновляться.
  4. Все, открываем магазин и скачиваем нужные данные

Исправить:

  1. Начните с первой версии и постепенно проверяйте каждую версию и запускайте ее, пока не обнаружите проблему.
  2. После того, как вы обнаружили проблему, определите, какая миграция плохая — что вызывает сбой.
  3. Исправьте миграцию (очень сильно зависит от того, что это за миграция, задайте новый вопрос...)
person Wain    schedule 26.08.2013
comment
Я реализовал предложенное вами решение для полного сброса, и, похоже, оно полностью решило мою проблему. Очевидным недостатком является то, что все файлы магазина будут сброшены (даже рабочие). Я буду действовать с большей осторожностью при выполнении будущих миграций. - person hatunike; 26.08.2013