
[英]Core Data: How do I add additional entities to an existing many-to-many relationship
[英]How do I set default values on new properties for existing entities after light weight core data migration?
我已成功完成核心数据 model 的轻量级迁移。
我的自定义实体 Vehicle 收到了一个新属性“tirePressure”,它是 double 类型的可选属性,默认值为 0.00。
当从商店中获取“旧”车辆(在迁移发生之前创建的车辆)时,其“轮胎压力”属性的值为 nil。 (这是预期的行为吗?)
所以我想:“没问题,我会在车辆 class 中执行此操作:”
- (void)awakeFromFetch {
[super awakeFromFetch];
if (nil == self.tirePressure) {
[self willChangeValueForKey:@"tirePressure"];
self.tirePressure = [NSNumber numberWithDouble:0.0];
[self didChangeValueForKey:@"tirePressure"];
}
}
由于“更改处理被明确禁用” awakeFromFetch我认为对 willChangeValueForKey 和 didChangeValueForKey 的调用会将“tirePresure”标记为脏。
但他们没有。
每次从商店中获取这些车辆时,“tirePressure”仍然为零,尽管已保存上下文。
6个月后我终于弄明白了。
添加到核心数据实体的属性必须标记为非可选的。 只有这样,在轻量级迁移期间才会自动为使用旧数据 model 创建的实体设置默认值。
您需要在awakeFromFetch
中使用setPrimativeValueForKey
,因为self.propertyName
使用的动态访问器尚未激活。
但是,由于默认值首先没有出现,这表明您的迁移详细失败。 您可能需要创建迁移 map 以确保迁移完全成功。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.