Автоматическое обновление метки времени изменения свойства NSManagedObject

У меня есть 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 ? Или все не так просто?

7
задан iHunter 1 January 2012 в 22:20
поделиться