2009-09-12 6 views
0

Je suis en train de créer un tableau d'objets à partir d'une hiérarchie d'autres objets comme celui-ci:Hors champ dans le tableau généré KVC

Code 1:

childController.names = [[NSMutableArray alloc] init]; 

for (Person *p in list.persons) { 
    [childController.names addObject:p.name]; 
} 

Code 2:

NSMutableArray *testArray = [list.persons valueForKey:@"name"]; 

Le premier extrait de code fonctionne parfaitement, renvoyant un tableau de noms de personnes. En revanche, la seconde renvoie un tableau avec le nombre correct de noms de personnes, mais ils sont affichés comme "Hors de portée" lorsque je débogue le code dans XCode. Quand je suis en train d'accéder à l'un d'eux, l'application se termine par:

en raison de l'application Mettre fin uncaught exception 'NSInvalidArgumentException', raison: « *** - [NSCFSet objectAtIndex:]: non reconnu sélecteur envoyé à l'instance 0x72e0620'

La liste, les personnes sont données de base des objets gérés si elle importe .. Qu'est-ce que je fais mal ???

+0

En outre, si votre 'propriété names' est une propriété' retain', vous lorsque vous définissez une fuite de avec '[[NSMuatableArray alloc] init]' (bien, vous aurez +2 retenir nombre après que vous avez défini votre propriété). – jbrennan

+0

Hmm, pouvez-vous expliquer cela un peu plus? Quelle serait la bonne façon de le faire? Merci! – johnl

Répondre

1

Vous devriez vérifier le type de persons. Il semble que ce soit un NSSet, et valueForKey: sur NSSet renverra un NSSet. Cet extrait de code devrait fonctionner comme prévu:

NSSet* testSet = [list.persons valueForKey:@"name"]; 
+0

Absolument correct! – johnl