Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/115.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 核心数据迁移-如何将两个实体合并为一个_Ios_Core Data_Core Data Migration - Fatal编程技术网

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

Ios 核心数据迁移-如何将两个实体合并为一个,ios,core-data,core-data-migration,Ios,Core Data,Core Data Migration,我有一个旧的核心数据模型,有两个实体: 第一实体 FirstString有一个属性:string1,它是NSString 第二实体 SecondString有一个属性:string2,它是NSString 它们具有一对多关系:第一个实体>第二个实体 新实体“ComboEntity”与第一个实体和第二个实体都有一对一的关系 现在我有了新的核心数据模型和新的实体 ComboEntity有一个属性:fullString 问题: 如何迁移数据并将字符串1和字符串2组合成fullString? 谢谢 您应

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

第一实体

FirstString有一个属性:string1,它是NSString

第二实体

SecondString有一个属性:string2,它是NSString

它们具有一对多关系:第一个实体>第二个实体

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

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

ComboEntity有一个属性:fullString

问题:

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


谢谢

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

  • 创建从旧实体版本到新实体版本的映射模型
  • 将代码更改为使用自定义映射策略而不是自动映射策略
  • 编写自定义映射策略类,请参见下面的示例:

  • 在映射模型中,编写一个值表达式,如屏幕截图所示。代替contactHashMD5,您将使用fullString属性

    致以最良好的祝愿


    sven.

    CoreData模型版本控制在iOS上有广泛的支持。基本上,您需要创建模型的新版本,并在其中创建新实体(可能还保留旧实体)。然后,根据您的需要,您可以从框架中选择不同级别的迁移支持,从“轻量级迁移”(simple用nil填充新字段)开始,直到“自定义实体迁移策略”(custom entity migration Policys),它允许您定义回调函数来执行任意复杂度的迁移过程。看


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

    感谢svena的快速回答。这就是我要找的。但是我该怎么做呢,因为我有两个不同的实体,我必须从中组合。您的答案针对一个实体到另一个实体的情况。谢谢事实上,我没有仔细阅读你的问题。您的场景是我以前从未测试过的。第一个实体如何与另一个实体相关联?第一个实体和第二个实体具有一对多关系。第一个实体>第二个实体。comboEntity与第一个实体和第二个实体都有一对一的关系。MrTJ,我阅读了文档,我觉得手动从一个实体迁移到另一个实体很舒服。但在我的情况下,我有两个不同的实体,我需要合并它们来填充一个新的实体。有两个实体的回调函数示例将非常有用。谢谢。您应该知道您必须将哪个string1实例与特定string2组合的信息。这里的操作类似于数据库意义上的连接。因此,您迭代场景中用作键的实体(并获取要调用的函数),然后从回调中打开与“键”对应的另一个实体的实例。我最近使用自定义NSEntityMigrationPolicy完成了这项操作。如果你还感兴趣,我会发布解决方案。@bentford,你是怎么做到的?
    @interface FullStringFromTwoStringsMappingPolicy : NSEntityMigrationPolicy
    
    - (NSString *)fullStringForMyEntity:(MyEntity *)myEntity;
    
    @end
    
    @implementation FullStringFromTwoStringsMappingPolicy
    
    - (NSString *)fullStringForMyEntity:(MyEntity *)myEntity
    {
        return [NSString stringWithFormat:@"%@ %@", myEntity.string1, myEntity.string2];
    }
    
    @end