Подтвердить что ты не робот

Как установить значения по умолчанию для новых свойств для существующих объектов после переноса данных основного веса легкого веса?

Я успешно завершил легкую миграцию по моей основной модели данных.

Мой пользовательский объект Автомобиль получил новое свойство "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"];
    }
  }

Так как "обработка изменений явно отключена вокруг" awakeFromFetch Я думал, что вызовы willChangeValueForKey и didChangeValueForKey будут отмечать "tirePresure" как грязные.

Но они этого не делают.

Каждый раз, когда эти транспортные средства извлекаются из магазина, "tirePressure" продолжает оставаться нулевым, несмотря на сохранение контекста.

4b9b3361

Ответ 1

Я, наконец, понял это через 6 месяцев.

Атрибуты, добавленные к основному объекту данных, должны быть отмечены как необязательные. Только после этого значения по умолчанию будут установлены автоматически во время легкой миграции для объектов, которые были созданы с помощью старой модели данных.

Ответ 2

Вам нужно использовать setPrimativeValueForKey в awakeFromFetch, потому что динамический аксессуар, используемый self.propertyName, еще не активирован.

Однако, поскольку значение по умолчанию не отображается в первую очередь, это указывает на то, что миграция завершилась неудачно. Возможно, вам понадобится создать карту переноса, чтобы обеспечить полную успешность миграции.