Инициирование процесса миграции

В этой главе описываются, как инициировать процесс миграции и как работает процесс миграции по умолчанию. Это не описывает настройку процесса миграции — это описано в Настройке Процесса Миграции.

Инициирование процесса миграции

При инициализации персистентного координатора хранилища Вы присваиваете ему модель управляемого объекта (см. initWithManagedObjectModel:); координатор использует ту модель для открытия персистентных хранилищ. Вы открываете персистентное использование хранилища addPersistentStoreWithType:configuration:URL:options:error:. То, как Вы используете этот метод, однако, зависит от того, использует ли Ваше приложение управление версиями модели и от того, как Вы принимаете решение поддерживать миграцию — принимаете ли Вы решение использовать процесс миграции по умолчанию или пользовательскую начальную загрузку обнаружения и миграции скоса версии. Следующий список описывает различные сценарии и что необходимо сделать в каждом:

Важно понять, что существует два ортогональных понятия:

  1. Можно выполнить пользовательский код во время миграции.

  2. У Вас может быть пользовательский код для начальной загрузки обнаружения и миграции скоса версии.

Классы миграционной политики позволяют Вам настраивать миграцию объектов и свойств многими способами, и они обычно - все, в чем Вы нуждаетесь. Вы могли бы, однако, использовать пользовательскую скошенную начальную загрузку обнаружения и миграции так, чтобы можно было взять под свой контроль процесс миграции. Например, если у Вас есть очень большие хранилища, Вы могли бы установить менеджера по миграции с этими двумя моделями данных, и затем использовать серию отображающихся моделей для миграции данных в целевое хранилище (при использовании того же целевого URL для каждого вызова Базовые Данные добавляют новые объекты к существующему хранилищу). Это позволяет платформе (и Вы) ограничивать объем данных в памяти во время процесса преобразования.

Процесс миграции по умолчанию

Чтобы открыть хранилище и выполнить миграцию (если необходимый), Вы используете addPersistentStoreWithType:configuration:URL:options:error: и добавьте к словарю опций запись, где ключ NSMigratePersistentStoresAutomaticallyOption и значение NSNumber представляющий объект YES. Ваш код выглядит подобным следующему примеру:

Перечисление 6-1  , Открывающееся хранилище с помощью автоматической миграции

NSError *error;
NSPersistentStoreCoordinator *psc = <#The coordinator#>;
NSURL *storeURL = <#The URL of a persistent store#>;
NSDictionary *optionsDictionary =
    [NSDictionary dictionaryWithObject:[NSNumber numberWithBool:YES]
                    forKey:NSMigratePersistentStoresAutomaticallyOption];
 
NSPersistentStore *store = [psc addPersistentStoreWithType:<#Store type#>
                                configuration:<#Configuration or nil#>
                                URL:storeURL
                                options:optionsDictionary
                                error:&error];

Если миграция продолжается успешно, существующее хранилище в storeURL переименован с суффиксом «~» перед любым расширением файла и перемещенным хранилищем, сохраненным к storeURL.

В его реализации addPersistentStoreWithType:configuration:URL:options:error: Базовые Данные делают следующее:

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

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

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

    Базовые Данные перерывают ресурсы Вашего приложения для доступных моделей отображения и тестируют каждого поочередно. Если это не может найти подходящее отображение, Базовые возвраты Данных NO и подходящая ошибка.

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

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

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