2010-01-26 5 views
2

Je suis en train d'écrire une application Core Data Cocoa dans laquelle il y a des comptes et des transactions (monétaires). La description de l'entité du compte contient un attribut de solde. La description de l'entité de transaction a une relation avec un compte.Reliures Cocoa: obtenir une ancienne valeur lors du changement

J'ai besoin de l'application pour mettre à jour les soldes de compte lorsque les transactions ont leurs comptes définis ou modifiés. Par exemple, si le compte d'une transaction passe de la vérification au crédit, les soldes de vérification et de crédit doivent être modifiés pour refléter cela. Le problème que j'ai est que je ne sais pas comment déterminer l'ancien compte de la transaction afin que je puisse mettre à jour son équilibre. J'utilise des fixations.

Quelqu'un peut-il me diriger dans la bonne direction?

Répondre

1

Je suppose que l'entité de compte a la relation inverse avec les transactions. (Apple vous suggère fortement de toujours avoir des relations inverses. Donc, si vous avez pas, s'il vous plaît le configurer!)

Disons que vous avez une sous-classe Account de NSManagedObject pour l'entité compte et Transaction pour l'entité de transaction. Appelez la relation inverse aux transactions transactions. Ensuite, lorsque vous modifiez le compte pour les transactions, la relation inverse est automatiquement mise à jour par CoreData. Donc, tout ce que vous avez à faire est d'écrire une routine d'auto-observation pour transactions dans Account de sorte que les objets Account gardent eux-mêmes la trace de l'équilibre. Je pense qu'il est plus orienté objet de faire Account objets pour prendre soin d'eux-mêmes que de changer l'équilibre du côté de l'objet Transaction ... bien que cela dépende bien sûr de votre goût.

Pour effectuer l'observation, vous utilisez KVO. Fondamentalement, vous enregistrez le KVO par addObserver:forKeyPath:options:context: avec un ensemble d'options appropriées. Ensuite, vous obtenez la modification en implémentant observeValueForKeyPath:ofObject:change:context:. Les changements peuvent être trouvés dans le dictionnaire transmis à cette méthode.

+0

Assurez-vous dans le paramètre 'options:' de '-addObserver: forKeyPath: options: context:' que vous spécifiez que vous souhaitez que les nouvelles valeurs et les anciennes valeurs soient transmises. –