Ios 核心数据迁移-如何将两个实体合并为一个
我有一个旧的核心数据模型,有两个实体: 第一实体 FirstString有一个属性:string1,它是NSString 第二实体 SecondString有一个属性:string2,它是NSString 它们具有一对多关系:第一个实体>第二个实体 新实体“ComboEntity”与第一个实体和第二个实体都有一对一的关系 现在我有了新的核心数据模型和新的实体 ComboEntity有一个属性:fullString 问题: 如何迁移数据并将字符串1和字符串2组合成fullString?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? 谢谢 您应
谢谢 您应该使用自定义映射策略
在映射模型中,编写一个值表达式,如屏幕截图所示。代替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