У меня есть NSManagedObject
с двумя свойствами:
NSNumber *score;
NSDate *score_timestamp;
Я хочу, чтобы мое поле score_timestamp
обновлялось каждый раз, когда я обновляю оценка
.
Я, очевидно, не могу использовать метод -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
? Или все не так просто?