Базовая миграция данных через несколько обновлений версии

Мне нравится пример механизмов, поскольку он позволяет, чтобы относительно чистое расширение включало интерфейсы в обсуждение (IAutomaticGearbox, кто-либо?)

25
задан westsider 2 March 2011 в 02:02
поделиться

2 ответа

Я использовал обычную миграцию, используя 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];
}  
2
ответ дан 28 November 2019 в 22:00
поделиться

Первоначальное сообщение было сделано много месяцев назад, но я думаю, что лучший ответ можно найти в книге Маркуса Зарры "Core Data" (или онлайн в примерах кода). Наберите в Google "progressivelyMigrateURL" и вы найдете код для постепенной итерации моделей - что позволит создавать отображения от модели n к модели n+1, не беспокоясь о комбинаторном взрыве для создания отображений между всеми парами моделей.

Это может привести к более медленной миграции во время выполнения. Я не исследовал этот вопрос.

7
ответ дан 28 November 2019 в 22:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: