【发布时间】:2016-04-08 07:42:28
【问题描述】:
我有一个 Core Data 托管对象模型全部设置并在 iOS 应用程序中工作,我正在使用 NSManagedObject 子类,这些子类是使用 [[MyEntityClass alloc] initWithEntity:description insertIntoManagedObjectContext:context]; 实例化的
我一直在阅读一些有关 Core Data 迁移的教程,以便为将来可能的应用程序更新做准备。对于我目前为这种特殊情况设想的更改,我相信轻量级迁移就足够了。我了解轻量级迁移将数据从旧数据模型映射到新版本。但是有一点我不清楚。如果持久存储包含迁移之前创建的 NSManagedObject 子类实例,这些对象是否会与模型一起修改以允许它们使用迁移中添加的属性?
我将举一个例子来确保我清楚我在问什么。假设我有一个名为的实体,使用经典示例 Person。 Person 具有以下属性:
firstname
lastname
我创建了一个名为aPerson 的Person 实例,并将其插入到持久存储中。我可以使用aPerson.firstname 和aPerson.lastname 访问aPerson 的属性。
现在我将dateofbirth 属性添加到托管对象模型,因此Person 实体包含以下属性:
firstname
lastname
dateofbirth
现在,如果我从持久存储中检索aPerson 并尝试访问aPerson.dateofbirth,会发生什么情况?我会因为aPerson 不包含dateofbirth 属性而收到无法识别的选择器错误,因为它是在添加该属性之前创建的?或者轻量级迁移是否会将dateofbirth 属性和访问器方法添加到已在持久存储中的所有Person 实例?
【问题讨论】: