2013-08-07 1 views
1

Если у меня есть несколько невыпущенных версий xcdatamodel между выпуском A и выпуском B, облегченная миграция будет работать после того, как я выпущу публикацию, если я удалю невыпущенные версии?Unreleased версии xcdatamodel и легкая миграция

Вот более дискретно пример:

xcdatamodel version 1.0 --> Release to public A 
xcdatamodel version 1.1 --> unreleased (based on v1.0) 
xcdatamodel version 1.2 --> unreleased (based on v1.1) 
xcdatamodel version 1.3 --> Release to public B (based on v1.2) 

Я хочу, чтобы убедиться, что, когда я представить релиз B, пользователи, поступающие от выпуска A будут перенесены должным образом. Или это совершенно ужасный способ сделать это? Я понимаю, что если бы меня не интересовали данные на моих тестовых устройствах, я бы просто основал версию xcdatamodel версии 1.3 на версии 1.0 и поместил все новое в эту версию - я просто не хочу терять данные на своих тестовых устройствах, которые уже имели версии приложения с v1.1 и v1.2 уже на устройстве.

Спасибо!

+1

Короткий ответ: да. Вы можете удалить промежуточные модели разработки перед выпуском. Как упоминалось @Mike Weller, существуют ограничения на то, что облегченная миграция может сделать, но если она работает в вашей среде разработки, то вы уже знаете, что для вас облегченная миграция. – sbaker

ответ

2

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

Что нужно включить в выпущенное приложение: каждая версия, которую может использовать любой пользователь. В вашем случае похоже, что у людей будет только 1,0-форматированные магазины, поэтому нет необходимости включать 1.1 или 1.2. Если это не так, т. Е. Если там есть кто-то, у кого могут быть данные версии 1.1 или 1.2, тогда вам нужно их включить.

Итак, до тех пор, пока 1.0 -> 1.3 изменяет работу с автоматическим облегчением миграции и, что у пользователей нет данных формата 1.1 или 1.2, вы можете просто удалить промежуточные версии.

+0

Спасибо Том! Это именно то, что мне нужно было знать. Единственное, что меня все еще путает, - это то, как миграция действительно будет работать, если удалены версии 1.1 и 1.2. Я представил себе, как это работает, переходя от одной «итерации» модели данных к следующей, последовательно.Согласно вашему ответу, он должен быть более волшебным, чем если бы он мог понять, как перенести 1.0-> 1.3, даже если версии 1.1 и 1.2 впоследствии были удалены. Если у вас есть какие-либо сведения об этом процессе или знаете о яблочном документе, который объясняет это, я бы хотел узнать. Еще раз спасибо! – DiscDev

+0

Во время выполнения Core Data знает, что представляет собой текущая модель. Если включена автоматическая легкая миграция, она проверяет, соответствует ли какая-либо неточная модель существующему постоянному хранилищу. Когда он находит один, он сравнивает эту модель с текущей, чтобы увидеть, возможна ли миграция. Модели не являются кумулятивными - есть только текущая версия и не актуальные версии. –

+0

Это имеет смысл. Наверное, меня отбросил xcode, потому что, когда вы создаете новую версию модели, она спрашивает, какую предыдущую версию вы хотите использовать для новой. Я предположил, что это связано с процессом миграции - я просвещен. Большое спасибо, Том! – DiscDev

0

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

  • Добавить новые дополнительные атрибуты или отношения к объекту
  • Добавить новые необходимые атрибуты объекта со значением по умолчанию
  • изменить существующий необязательный атрибут требуется, но со значением по умолчанию value
  • Переименуйте атрибут или взаимосвязь или сущность и укажите старое имя в поле «Переименование идентификатора» на вкладке «Утилиты основных данных».

Core Data Model Versioning and Data Migration Programming Guide перечисляет больше операций, но снова вы должны проверить все это.

+0

Эй, Майк, спасибо за ответ. Думаю, я немного провожу вас в неправильном направлении. Я действительно не спрашиваю, являются ли изменения в моих различных моделях «мигрируемыми» - я уверен, что они есть. Я действительно больше задаюсь вопросом, будет ли пользователь, идущий от Release A до Release B в моем примере выше, перенести из v1.0-> v1.1-> v1.2-> v1.3 при обновлении или в v1. 1 и v1.2 полностью игнорируются. то есть я могу удалить v1.1 и v1.2 модели до того, как я выпущу, или оставить их в покое. – DiscDev