核心数据迁移 – 如何将两个实体合并为一个
我有一个旧的核心数据模型,有两个实体:
第一实体
FirstString有一个属性:string1,即NSString
第二实体
SecondString有一个属性:string2,即NSString
他们有一对多的关系:第一个实体>第二个实体。
新实体 – “ComboEntity” – 与第一实体和第二实体都具有一对一的关系。
现在我有了新的核心数据模型和新实体
ComboEntity有一个属性:fullString
题:
如何迁移数据并将字符串1和字符串2组合成fullString?
谢谢!
您应该使用自定义映射策略。
- 创建从旧实体版本到新实体版本的映射模型
- 更改您的代码以使用自定义映射策略而不是自动
- 编写自定义映射策略类,请参阅下面的示例:
@interface FullStringFromTwoStringsMappingPolicy : NSEntityMigrationPolicy - (NSString *)fullStringForMyEntity:(MyEntity *)myEntity; @end @implementation FullStringFromTwoStringsMappingPolicy - (NSString *)fullStringForMyEntity:(MyEntity *)myEntity { return [NSString stringWithFormat:@"%@ %@", myEntity.string1, myEntity.string2]; } @end
在映射模型中,您可以编写一个值表达式,如屏幕截图所示。 而不是contactHashMD5,而是你的fullString属性。
最好的祝福,
斯文。
CoreData模型版本控制在iOS上有广泛的支持。 基本上,您需要创建模型的新版本并在其中创建新实体(可能还留下旧实体)。 然后,根据您的需要,您可以从框架中选择不同级别的迁移支持,从简单用nil填充新字段的“轻量级迁移”开始,直到“自定义实体迁移策略”允许您定义将使用的回调函数做任意复杂的迁移过程。 看到这里 。
在您的情况下,您也可以手动执行迁移,检查每个应用程序启动(或仅一次)是否已经转换模型,如果没有,则运行一个循环,根据旧实体填充新实体。