2015-05-12 6 views
1

У меня есть приложение, синхронизирующее основные данные с iCloud. Мне нужно обновить модель, добавив два атрибута, а затем заполнить эти новые поля.iCloud и легкая миграция

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

Когда я активирую iCloud, старые данные, сохраненные в контейнере ubiquity, не синхронизируются с новой схемой модели. Каково ожидаемое поведение? Должен ли я синхронизировать данные как на старых, так и на новых версиях модели? Как я могу это достичь и проверить эту ситуацию?

Я прочитал:

CoreData versioning и

Understanding Core Data iCloud Store Migration When Testing an iOS App Update

, но, на самом деле, я очень смущен.

+2

Я обнаружил, что обновление магазина iCloud является ненадежным, и особенно при использовании режима WAL. Подход, который я беру сейчас, это проверить, нужно ли обновлять хранилище при запуске приложения, и если это так, то сначала перенесите хранилище в локальное хранилище, затем выполните обновление, а затем перенесите его обратно в iCloud. Это, похоже, работает надежно сейчас, но требует некоторого взаимодействия с пользователем, поскольку что-то может занять некоторое время, и вам нужно убедиться, что хранилище iCloud полностью удалено, а затем заменено на всех устройствах. –

+0

Я бы хотел не привлекать пользователя взаимодействие в этой миграции, но такие ситуации, как http://stackoverflow.com/questions/27792667/icloud-core-data-model-schema-migration#comment48520244_27792667 creep me out – laucel

+1

Точно, см. мою точку выше повторных миграций в хранилище iCloud ... Если он не на 100% надежный, это не вариант. Я также предоставляю функцию резервного копирования, которая переносит существующее хранилище (iCloud или local) в другой локальный файл. Затем пользователь может копировать файл резервной копии в iCloud для предоставления дополнительной резервной копии и/или восстановления базы данных из одной из резервных копий. Вы можете найти дополнительную информацию о некоторых моих других сообщениях, в которых есть ссылки на пример приложения и код для некоторых из них. –

ответ

4

Что должно произойти, так это то, что данные iCloud синхронизируются между устройствами, использующими ту же версию модели данных. Если вы обновляете приложение на одном устройстве, но не на втором устройстве, они не будут синхронизировать изменения, пока второе устройство также не обновится до новой версии модели.

Если это не то, что вы видите, добавьте более подробную информацию о проблеме, которую вы видите.

+0

спасибо, теперь понятно. Для тестирования следует установить на устройство приложение со старой версией модели, а затем на новое приложение с более новой версией модели? Если я не ошибаюсь, создание нового приложения в опубликованном не должно работать – laucel

+1

Если вы хотите установить приложение из Xcode, если на телефоне уже есть версия магазина приложений, это должно сработать. Это довольно распространенный метод тестирования процесса обновления для новой версии приложения. –

+0

Я имел в виду, что, но миграция не работает, когда я устанавливаю приложение из Xcode (новая модель) в версии магазина (старая модель), см. Вторую ссылку в вопросе, спасибо – laucel