Ошибка переноса основных данных только в сборках выпуска - PullRequest
2 голосов
/ 27 июня 2011

Я добавил атрибут в модель Core Data (iOS). У меня была версия 2, поэтому я добавил новую модель и сохранил новый атрибут в версии 3.

Мой код загрузки является стандартным (инициализация MOM с использованием initWithContentsOfURL:, указывающая на мой каталог .momd внутри моего пакета), а затем передача этой MOM в NSPersistentStoreCoordinator.

Затем я загружаю свое приложение из App Store, запускаю его и пытаюсь проверить миграцию. Легкая миграция работает нормально на моем симуляторе и моем телефоне в режиме отладки (привязано к Xcode 4).

Однако, когда я синхронизирую сборку выпуска (используя функцию «Архив» в XCode) с помощью iTunes, хранилище данных моего приложения не переносится с этой ошибкой:

Error Domain=NSCocoaErrorDomain Code=134130 "The operation couldn’t be completed.
(Cocoa error 134130.)", reason=Can't find model for source store}

Хуже того, хранилище теряется в каком-то состоянии вуду, куда оно не может выйти - если я заново привязываю устройство и снова устанавливаю сборку Debug из XCode, я не могу "восстановить" миграцию.

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

Я попытался выполнить миграцию вручную, но это также дало ошибку. Однако, поскольку я добавил только 1 атрибут к 1 объекту, не имеет смысла, что облегченная миграция не работает.

1 Ответ

2 голосов
/ 27 июня 2011

Каждый раз, когда я видел эту проблему, в моем коде или кого-то еще, это был XCode, входящий в какое-то плохое состояние в отношении версий модели, которые он развертывает в приложении. Откройте Release IPA-архив своего приложения и посмотрите, какие mom файлы находятся в нем. Если вы видите, что отсутствует одна из предыдущих версий, вероятно, это та же проблема. Что касается решения, у меня были смешанные результаты; некоторые варианты следующих шагов работают для меня, но никогда не в последовательном порядке.

  • Очистите и удалите производные данные для проекта (убедитесь, что у вас сохранен архив вашего выпущенного приложения, чтобы вы могли при необходимости обозначить его символикой)
  • Переименуйте файлы предыдущей версии модели (в xcode), добавив или удалив пробел между именем и цифрой, обозначающей номер версии (если у нее есть пробел, замените на '_', если у нее нет пробела попробуйте добавить один)
  • Добавить новую версию модели, не меняя ее содержимого, и сделать ее «текущей» версией

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

...