2009-08-08 9 views
0

J'ai un attribut dans un objet géré de base de données que j'essaie de mettre à jour en fonction d'un autre attribut.Recalculer l'attribut à chaque modification d'un autre attribut dans les données de base MO

Comment puis-je implémenter une méthode appelée chaque fois que l'attribut original est modifié?

awakeFromInsert et awakeFromFetch ne fonctionnera évidemment pas. J'ai vu keyPathsForValuesAffectingValueForKey mais je ne comprends pas vraiment comment je pourrais l'utiliser.

Merci beaucoup

Répondre

2

Vous êtes sur la bonne voie. Disons que vous avez deux attributs: foo, et bar, avec bar étant calculé sur la base de foo. Pour cela, vous devez mettre en œuvre la méthode +keyPathsForValuesAffectingBar:

+ (NSSet *)keyPathsForValuesAffectingBar { 
    return [NSSet setWithObject:@"foo"]; 
} 

Maintenant, chaque fois foo changements, les objets liés à bar seront eux-mêmes mettre à jour.

De toute évidence, cela ne sera pas très utile si vous mettez en cache la valeur bar, car vous devez réellement recalculer et recachez-le. Cependant, à moins de faire des calculs très sérieux pour déterminer bar, il est préférable de simplement calculer bar à chaque fois que la méthode -bar est appelée.

Questions connexes