在轻量级核心数据迁移后,如何为现有实体的新属性设置默认值?

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个月后弄明白了.

添加到核心数据实体的属性必须标记为非可选.只有这样,在使用旧数据模型创建的实体的轻量级迁移期间,才会自动设置默认值.

  • 6个月!非常感谢你回来并回答. (10认同)
  • 谢谢,你改变了我的一天. (2认同)