N'ayez pas peur. Bien que les opérateurs set et array de KVC soient très puissants, je me retrouve toujours à devoir consulter la documentation presque chaque fois que je les utilise dans des chemins clés complexes comme celui-ci. Parce que valueForKeyPath:
est une méthode, vous pouvez l'appeler à partir de la console du débogueur. Je trouve souvent que l'obtention d'un chemin d'accès correct nécessite de définir un point d'arrêt juste avant l'appel KVC et d'essayer quelques éléments dans la console du débogueur. Python avec PyObjC (inclus dans OSX depuis 10.5) est aussi un excellent environnement interactif pour tester/déboguer les keypaths KVC. Dans cet exemple particulier ...
@sum
envoie le message -[NSNumber decimalValue]
à chaque article retourné par [company valueForKeyPath:@"departments.employees"]
(le « tableau recevant » en valeur de clé langage de codage). Il s'attend donc à ce que chaque élément du tableau récepteur soit un NSNumber
. Je soupçonne que company.departments
est un ensemble, ainsi [company valueForKeyPath:@"departments.employees"]
est un ensemble d'ensembles, pas une collection de NSNumbers
. Je crois que vous voulez créer une collection « aplati » de tous les employés, à partir de laquelle vous pouvez calculer la somme:
id allEmployees = [company valueForKeyPath:@"[email protected]"];
NSNumber *totalSalary = [allEmployees valueForKeyPath:@"@sum.salary"];
En supposant que chaque employé est dans un seul département, ce qui suit semble également travailler
NSNumber *totalSalary = [company valueForKeyPath:@"[email protected]@sum.salary"];
hmm Je ne savais pas que nous pouvions utiliser le débogueur interactivement, j'ai toujours pensé que si nous voulions que nous puissions utiliser Ruby Cocoa ou PyObjC. Mais merci! –