2010-01-14 17 views
5

J'ai un NSArrayController et moi quand je reçois le selectedObjects et créer un NSString avec la valeur de valueForKey:@"Name" retourneObtenir la valeur de chaîne à partir d'un NSArray

(
    "This is still a work in progress " 
) 

et tout ce que je veux avoir est le texte dans la "" comment pourrais-je obtenir cela? En outre, ce mon code:

NSArray *arrayWithSelectedObjects = [[NSArray alloc] initWithArray:[arrayController selectedObjects]]; 

NSString *nameFromArray = [NSString stringWithFormat:@"%@", [arrayWithSelectedObjects valueForKey:@"Name"]]; 
NSLog(@"%@", nameFromArray); 

Modifier: J'ai également d'autres chaînes dans le tableau

Répondre

16

Lorsque vous appelez valueForKey: sur un tableau, il appelle valueForKey: sur chacun des éléments contenus dans le tableau, et renvoie ces valeurs dans un nouveau tableau, en remplaçant NSNull par des valeurs nil. Il n'y a également aucun besoin de dupliquer le tableau selectedObjects du contrôleur car il est immuable de toute façon.

Si vous avez plusieurs objets dans les objets sélectionnés de votre contrôleur RAID, et vous voulez voir la valeur de la clé du nom de tous les éléments dans les objets sélectionnés, il suffit de faire:


NSArray *names = [[arrayController selectedObjects] valueForKey:@"name"]; 

for (id name in names) 
    NSLog (@"%@", name); 

Bien sûr, vous pourriez les imprimer sur à la fois si vous avez fait:

NSLog (@"%@", [[arrayController selectedObjects] valueForKey:@"name"]); 

S'il n'y a qu'un seul élément du tableau selectedObjects, et que vous appelez valueForKey:, il retournera encore un tableau, mais il ne contiendra que la valeur de la clé de l'élément solitaire dans le tableau. Vous pouvez faire référence à ceci avec lastObject.

NSString *theName = [[[arrayController selectedObjects] valueForKey:@"name"] lastObject]; 
NSLog (@"%@", theName);