核心数据中的版本化数据模型集成

时间:2013-04-08 15:30:17

标签: ios objective-c core-data migration database-migration

我的iOS项目中有两个版本化的数据模型。

数据模型之间的区别在于较新的模型有一个名为“new_col”的新字段。

在项目的某些部分,我需要获取由此“new_col”字段过滤的数据。

所以,我使用了以下代码。

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"new_col = %@", val];
[request setPredicate:predicate];

NSArray *results = [context executeFetchRequest:request error:&err];

我遇到了异常 - 'NSInvalidArgumentException',原因:'在实体中找不到keypath new_col ...

我知道这是因为原始数据模型。

我认为我应该将原始数据转换为新的数据模型。

我该如何转换?

2 个答案:

答案 0 :(得分:0)

快速Google。

https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CoreDataVersioning/Articles/Introduction.html

这是Apple支持的,是将用户数据从一种模式迁移到另一种模式的正确方法。

答案 1 :(得分:0)

如果要添加新属性并希望保持向后兼容性,则应为新属性指定默认值,或在核心数据编辑器中将其保留为“可选”。

完成此操作后,您需要确保已启用自动迁移。有关如何执行此操作的详细信息,请参阅Implementation of “Automatic Lightweight Migration” for Core Data。然后,现有/旧实体将采用默认值(如果已定义),如果属性是可选的,则为nil。