2013-12-06 3 views
0

У меня есть модель управляемого объекта, которая содержит только одну сущность, Person. В версии модели 1 Person имел id и атрибут name. В версии 2 я добавил атрибут phone и увеличил число пользователей id с использованием пользовательской модели сопоставления. Позже я создал версию 3, удалив атрибут phone. Вот версия 1 и версия 3 являются идентичными случайно, как показано ниже:Перенос основных данных при наличии двух идентичных версий модели

MOM ver | v1  | v2  | v3 
---------+-----------+-----------+----------- 
Entity | Person | Person | Person 
Attrs | - id | - id | - id 
     | - name | - name | - name 
     |   | - phone | 


       |  ^ |  ^
       `--------'  `-------' 
Mapping: * Add phone  * Remove phone 
      * Increment id 

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

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

ответ

1

Вы добавляли новую версию модели каждый раз, правильно? Каждая из ваших моделей должна иметь уникальный идентификатор модели. Выберите .xcdatamodel в своей модели данных, и идентификатор появится в разделе «Модель данных ядра» в «Конструкторе интерфейсов». Мне нравится давать им ID, такие как 1.0, 2.0 ... соответствующие фактической версии приложения.

Это строка, вы можете проверить в коде, если миграция нужна или другие вещи, вам нужно:

[[[self objectModel] versionIdentifiers] anyObject]

Смежные вопросы