Атрибут переименования основных данных "удален"
Я перемещаю модель данных с помощью модели сопоставления.
У сущности есть атрибут с именем удалено, который не мигрирует, потому что Базовые Данные принимают удаленное свойство 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 к старой версии модели позволяет получить доступ к удаленным атрибутам, которые были недоступны в облегченных миграциях или моделях сопоставления.
К сожалению, вы использовали зарезервированное слово (которое, я подозреваю, произвело в то время предупреждение).
Лучше всего сделать легкую миграцию, и это значение НЕ будет мигрировать. Затем после миграции; переберите данные и обновите значение вручную для каждого объекта. Вам нужно будет сделать это только один раз, так как после завершения миграции старое свойство зарезервированного слова исчезнет.