核心数据重命名属性 "deleted"
Core Data rename attribute "deleted"
我正在使用映射模型迁移数据模型。
一个实体有一个名为 deleted 的属性,该属性不会迁移,因为 Core Data 使用 deleted 属性 NSManagedObject 而不是我的。
如何强制映射模型使用我的属性?
我可以在值表达式中使用什么吗?这是我现在使用的:
谢谢。
不幸的是你使用了一个保留字(我怀疑它当时产生了警告)。
您最好的选择是进行轻量级迁移,该值将不 迁移。然后在迁移之后;遍历数据并手动更新每个对象的值。您只需执行一次,因为一旦迁移完成,旧的保留字 属性 将消失。
我找到了解决方案:
我实现了一个自定义 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 转换为旧模型版本允许访问在轻量级迁移或映射模型中无法访问的 deleted 属性。
我正在使用映射模型迁移数据模型。
一个实体有一个名为 deleted 的属性,该属性不会迁移,因为 Core Data 使用 deleted 属性 NSManagedObject 而不是我的。
如何强制映射模型使用我的属性?
我可以在值表达式中使用什么吗?这是我现在使用的:
谢谢。
不幸的是你使用了一个保留字(我怀疑它当时产生了警告)。
您最好的选择是进行轻量级迁移,该值将不 迁移。然后在迁移之后;遍历数据并手动更新每个对象的值。您只需执行一次,因为一旦迁移完成,旧的保留字 属性 将消失。
我找到了解决方案:
我实现了一个自定义 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 转换为旧模型版本允许访问在轻量级迁移或映射模型中无法访问的 deleted 属性。