Mor*_*itz 27 iphone core-data core-data-migration ios
我在核心数据模型上成功完成了轻量级迁移.
我的自定义实体Vehicle收到了一个新属性'tirePressure',它是double类型的可选属性,默认值为0.00.
当"旧"车辆从商店取出时(在迁移发生之前创建的车辆),他们的'tirePressure'属性的值为零.(这是预期的行为吗?)
所以我想:"没问题,我会在Vehicle类中做到这一点:"
- (void)awakeFromFetch {
[super awakeFromFetch];
if (nil == self.tirePressure) {
[self willChangeValueForKey:@"tirePressure"];
self.tirePressure = [NSNumber numberWithDouble:0.0];
[self didChangeValueForKey:@"tirePressure"];
}
}
Run Code Online (Sandbox Code Playgroud)
由于"更改处理明确禁用" awakeFromFetch,我认为调用willChangeValueForKey和didChangeValueForKey会将'tirePresure'标记为脏.
但他们没有.
每次这些车辆从商店取出"轮胎压力",尽管已经保存了上下文,但仍然是零.
Mor*_*itz 79
我终于在6个月后弄明白了.
添加到核心数据实体的属性必须标记为非可选.只有这样,在使用旧数据模型创建的实体的轻量级迁移期间,才会自动设置默认值.