Упрощенная миграция основных данных — когда переходить на новую версию?

Могу ли я сделать следующее?

  1. Начните с версии 1.0 приложения. Модель данных версии, обозначьте новую версию как активную схему
  2. Установите правильные параметры в appDelegate для создания NSPersistentStoreCoordinator с использованием облегченной миграции.
  3. Внесите простые изменения в модель и обновите классы. Скомпилируйте и убедитесь, что все работает.
  4. Внесите еще одно изменение в модель данных без изменения версии и снова обновите классы

Конечно, при запуске модель данных будет несовместима, так как я изменил ее без версии. Но так как я не буду выпускать промежуточную версию, подозреваю, что миграция данных должна нормально работать при обновлении с версии 1.0 до модели данных с двойным обновлением.

Это точно?


person Ben Packard    schedule 26.11.2012    source источник


Ответы (1)


Это будет работать до тех пор, пока верно следующее:

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

Если все это правда, то это сработает. И вы даже можете дойти до того, что не будете выпускать v2 в финальном билде (хотя они небольшие и обычно это не стоит затраченных усилий).

Во время разработки я рекомендую всегда сохранять данные версии 1, изменять только версию 2 и выполнять повторную миграцию каждый раз, когда вам нужно настроить версию 2. Тогда нет никакого промежуточного звена, с которым можно было бы иметь дело. Однако это не всегда возможно при работе с бета-тестерами.

person Marcus S. Zarra    schedule 26.11.2012
comment
Спасибо, Маркус. Но на шаге 4 я не версионирую модель данных. Я просто меняю его (и классы). Если я ограничил оба набора изменений только легкосовместимыми, не должны ли базовые данные правильно определить миграцию v1 → v3 без знания v2 (на самом деле, v3 — это просто некоторые изменения на месте). на v2, а не новую версию)? Помните, что v2 никогда не бывает в дикой природе. - person Ben Packard; 26.11.2012
comment
Да, за исключением случаев, когда у вас есть данные v2 на диске, тогда Core Data выдаст ошибку, потому что у него нет исходной модели для расчета дельты. Чтобы выполнить миграцию, Core Data требует источник и место назначения для любой миграции. Если вы сбрасываете свои данные обратно к V1 или начинаете заново, то да, вы можете это сделать. - person Marcus S. Zarra; 26.11.2012
comment
Спасибо - да, я предполагаю, что ни на одном устройстве не будет данных v2. Все в дикой природе — это v1, и только симулятор и мое тестовое устройство когда-либо были перенесены на V2, на котором я буду переустанавливать. - person Ben Packard; 26.11.2012