对于这个例子,我想说我的核心数据模型是:
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
?
我想我需要使用迁移管理器或映射模型,不知道它对我有什么帮助,以及如何使用它。
我将欣赏这种用例的一个简单示例。
答案 0 :(得分:2)
您可以使用Core Data中提供的迁移选项,但在这种情况下,使用所谓的Lightweight migration
是不够的。自定义迁移的学习曲线相当可观。
另一种选择是简单地将Address
实体留在模型中,以便您可以将其用于“手动”迁移过程。当应用程序第一次使用新方案启动时,使用此实体构造新的地址字符串。
在其余代码中,您只需忽略它。在我看来,这是最实用和最简单的解决方案。