从方案中删除实体后的核心数据迁移

时间:2014-09-04 12:49:32

标签: ios objective-c core-data

对于这个例子,我想说我的核心数据模型是:

Person
------  
- firstName  (string)
- lastName (string)  

- address (to-one relationship with Address)  

Address  
-------  
- streetName  (string)
- streetNumber (int)  

- person (to-one relationship with Person)  

现在我的应用程序的下一个版本,我想简化我的模型:

Person
------  
- firstName  (string)
- lastName (string)  
- address (string) 

正如您所看到的,我从模型方案中删除了Address实体,并添加了一个"地址" Person中的字符串属性,而不是与Address实体的一对一关系。

我的问题是如何进行此类迁移?

当然我需要为新结构调整我的模型,所以我想要做的就是遍历我所有的Person对象并执行以下操作:

for (Person *per in allPersons) {    
   NSString *stName = per.address.streetName;  
   NSString *stNum = per.address.streetNumber;
   per.address = [NSString stringWithFormat:@"%@ %@", stName, stNum];
}

问题是我的新方案中不再存在地址实体,那么我该如何做per.address

我想我需要使用迁移管理器或映射模型,不知道它对我有什么帮助,以及如何使用它。
我将欣赏这种用例的一个简单示例。

1 个答案:

答案 0 :(得分:2)

您可以使用Core Data中提供的迁移选项,但在这种情况下,使用所谓的Lightweight migration是不够的。自定义迁移的学习曲线相当可观。

另一种选择是简单地将Address实体留在模型中,以便您可以将其用于“手动”迁移过程。当应用程序第一次使用新方案启动时,使用此实体构造新的地址字符串。

在其余代码中,您只需忽略它。在我看来,这是最实用和最简单的解决方案。