que tienen un NSManagedObject
con dos propiedades:Autoupdating NSManagedObject modificación de la propiedad de marca de tiempo
NSNumber *score;
NSDate *score_timestamp;
Quiero mi campo score_timestamp
que se actualiza cada vez que actualizo score
.
Obviamente no puedo usar el método -willSave
ya que mi contexto se guarda ocasionalmente, y score_timestamp
no estará actualizado. Por lo tanto, debo anular -setScore:
o configurar mi objeto administrado como un observador clave-valor para su propio campo score
.
La solución parece fácil -setScore:
:
- (void) setScore:(NSNumber *)score
{
[self willChangeValueForKey:@"score"];
[self setPrimitiveScore:score];
[self didChangeValueForKey:@"score"];
self.score_timestamp = [NSDate date];
}
¿Hay advertencias en hacer las cosas de esa manera? O debería usar una solución KVO?
actualización
Hasta ahora he recibido dos respuestas que mi código no funcionará a través setValue: forKey:
y todavía estoy esperando por ejemplo. Llamada ingenua al [(NSManagedObject *)myObject setValue:value forKey:@"score"]
llama a mi setter de todos modos.
Así que si me cambio a una solución de MVA, debo addObserver:
en todas awake
métodos y retirarlo en willTurnIntoFault
? O eso no es tan simple?
En serio, ambos contestadores que indican que setValue ... no funcionarán son incorrectos. Puede probar esto de manera bastante trivial al poner un punto de interrupción en su acceso, luego cambiar el valor usando setValue. – jrturton
@jrturton Ya lo he probado, seguramente se llama. Pero no soy un experto en Core Data para asegurarme de que haya otra forma de cambiar mi propiedad sin el acceso. Me refiero a la forma de ser utilizado ocasionalmente en código real. – iHunter
No. Todas las llamadas de datos centrales pasarán por su setter (posiblemente a través de setValueForKey primero). Es parte del principio de encapsulación. Podrías tener un acceso directo freaky al ivar pero esto tendría que ser algo que habías escrito tú mismo que probablemente también rompería el contexto del objeto administrado. No te harías eso a ti mismo, ¿verdad? – jrturton