Атрибут переименования основных данных "удален"

Я перемещаю модель данных с помощью модели сопоставления.

У сущности есть атрибут с именем удалено, который не мигрирует, потому что Базовые Данные принимают удаленное свойство NSManagedObject вместо моего.

Как я могу заставить Картографическую Модель использовать мой атрибут?

Могу ли я использовать что-либо в выражении значения? Это то, что я использую сейчас:

введите описание изображения здесь

Спасибо.

2 ответа

Решение

Я нашел решение:

Я реализовал пользовательский MigrationPolicy следующим образом:

- (BOOL)createDestinationInstancesForSourceInstance:(NSManagedObject *)sourceInstance
                                  entityMapping:(NSEntityMapping *)mapping
                                        manager:(NSMigrationManager *)manager
                                          error:(NSError *__autoreleasing *)error
{
    NSManagedObject *newObject = [NSEntityDescription insertNewObjectForEntityForName:[mapping destinationEntityName] inManagedObjectContext:[manager destinationContext]];

    // Add the old 'deleted' attribute to a renamed attribute
    [newObject setValue:[NSNumber numberWithBool:[((OldEntityModel *)sourceInstance) deleted]] forKey:@"newDeletedAttribute"];

    // Add all the other attributes
    [newObject setValue:[sourceInstance valueForKey:@"field1"] forKey:@"field1"];
    [newObject setValue:[sourceInstance valueForKey:@"field2"] forKey:@"field2"];

    // Add the relationships
    NSSet *relationshipAttribute = [[NSSet alloc] initWithArray:[manager destinationInstancesForEntityMappingNamed:@"OtherEntityToOtherEntity" sourceInstances:@[[sourceInstance valueForKey:@"relationshipAttribute"]]]];
    [newObject relationshipAttribute forKey:@"relationshipAttribute"];

    [manager associateSourceInstance:sourceInstance withDestinationInstance:newObject forEntityMapping:mapping];

    return YES;
}

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

К сожалению, вы использовали зарезервированное слово (которое, я подозреваю, произвело в то время предупреждение).

Лучше всего сделать легкую миграцию, и это значение НЕ будет мигрировать. Затем после миграции; переберите данные и обновите значение вручную для каждого объекта. Вам нужно будет сделать это только один раз, так как после завершения миграции старое свойство зарезервированного слова исчезнет.

Другие вопросы по тегам