核心数据迁移 – 如何将两个实体合并为一个

我有一个旧的核心数据模型,有两个实体:

第一实体

FirstString有一个属性:string1,即NSString

第二实体

SecondString有一个属性:string2,即NSString

他们有一对多的关系:第一个实体>第二个实体。

新实体 – “ComboEntity” – 与第一实体和第二实体都具有一对一的关系。

现在我有了新的核心数据模型和新实体

ComboEntity有一个属性:fullString

题:

如何迁移数据并将字符串1和字符串2组合成fullString?

谢谢!

您应该使用自定义映射策略。

  1. 创建从旧实体版本到新实体版本的映射模型
  2. 更改您的代码以使用自定义映射策略而不是自动
  3. 编写自定义映射策略类,请参阅下面的示例:

@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填充新字段的“轻量级迁移”开始,直到“自定义实体迁移策略”允许您定义将使用的回调函数做任意复杂的迁移过程。 看到这里 。

在您的情况下,您也可以手动执行迁移,检查每个应用程序启动(或仅一次)是否已经转换模型,如果没有,则运行一个循环,根据旧实体填充新实体。