Мне нравится пример механизмов, поскольку он позволяет, чтобы относительно чистое расширение включало интерфейсы в обсуждение (IAutomaticGearbox, кто-либо?)
Я использовал обычную миграцию, используя createDestinationInstancesForSourceInstance.
Во фрагменте показано, как переопределить этот метод и как получить исходную версию модели для миграции.
Фактическая миграция происходит во вспомогательном классе TZMigrationHelper.
- (BOOL)createDestinationInstancesForSourceInstance:(NSManagedObject *)sInstance entityMapping:(NSEntityMapping *)mapping manager:(NSMigrationManager *)manager error:(NSError **)error
{
float sourceVersion = [[[mapping userInfo] valueForKey:@"sourceVersion"] floatValue];
if(sourceVersion <= 0.9)
{
mapping = [TZMigrationHelper addAttributeMappingForDerivedRTFProperties:sInstance mapping:mapping propertyName:@"someProperty"];
mapping = [TZMigrationHelper addAttributeMappingForDerivedRTFProperties:sInstance mapping:mapping propertyName:@"anotherProperty"];
mapping = [TZMigrationHelper addAttributeMappingForDerivedRTFProperties:sInstance mapping:mapping propertyName:@"oneMoreProperty"];
}
return [super createDestinationInstancesForSourceInstance:sInstance entityMapping:mapping manager:manager error:error];
}
Первоначальное сообщение было сделано много месяцев назад, но я думаю, что лучший ответ можно найти в книге Маркуса Зарры "Core Data" (или онлайн в примерах кода). Наберите в Google "progressivelyMigrateURL" и вы найдете код для постепенной итерации моделей - что позволит создавать отображения от модели n к модели n+1, не беспокоясь о комбинаторном взрыве для создания отображений между всеми парами моделей.
Это может привести к более медленной миграции во время выполнения. Я не исследовал этот вопрос.