У меня есть NSManagedObject
с двумя свойствами:
NSNumber *score;
NSDate *score_timestamp;
Я хочу, чтобы мое поле score_timestamp
обновлялось при каждом обновлении score
.
Я явно не могу использовать-willSave
метод, поскольку мой контекст иногда сохраняется, и score_timestamp
не будет обновляться.Поэтому я должен либо переопределить -setScore:
, либо настроить свой управляемый объект в качестве наблюдателя значения ключа для своего собственного поля score
.
Решение -setScore:
кажется простым:
- (void) setScore:(NSNumber *)score
{
[self willChangeValueForKey:@"score"];
[self setPrimitiveScore:score];
[self didChangeValueForKey:@"score"];
self.score_timestamp = [NSDate date];
}
Есть ли какие-то предостережения в том, чтобы так поступать?Или я должен использовать решение KVO?
Обновление
До сих пор я получил два ответа, что мой код не будет работать через setValue: forKey:
, и я до сих поржду например.Наивный вызов [(NSManagedObject *)myObject setValue:value forKey:@"score"]
все равно вызывает мой установщик.
Так что, если я переключусь на решение KVO, должен ли я addObserver:
во всех awake
методах и удалить его в willTurnIntoFault
?Или это не так просто?