我已经成功完成了核心数据模型的轻量级迁移。
我的自定义实体 Vehicle 收到了一个新属性“tirePressure”,它是 double 类型的可选属性,默认值为 0.00。
当从商店中获取“旧”车辆(在迁移发生之前创建的车辆)时,其“tirePressure”属性的值为 nil。 (这是预期的行为吗?)
所以我想:“没问题,我就在 Vehicle 类中这样做:”
- (void)awakeFromFetch {
[super awakeFromFetch];
if (nil == self.tirePressure) {
[self willChangeValueForKey:@"tirePressure"];
self.tirePressure = [NSNumber numberWithDouble:0.0];
[self didChangeValueForKey:@"tirePressure"];
}
}
Since “更改处理被明确禁用” 唤醒从获取 http://developer.apple.com/library/ios/DOCUMENTATION/Cocoa/Reference/CoreDataFramework/Classes/NSManagedObject_Class/Reference/NSManagedObject.html#//apple_ref/occ/instm/NSManagedObject/awakeFromFetch我认为对 willChangeValueForKey 和 didChangeValueForKey 的调用会将“tirePresure”标记为脏。
但他们没有。
每次从商店中获取这些车辆时,尽管已保存上下文,“tirePressure”仍然为零。
6个月后我终于想通了。
添加到核心数据实体的属性必须标记为非可选。
只有这样,在轻量级迁移期间才会自动为使用旧数据模型创建的实体设置默认值。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)