2010-05-18 2 views
3

Si j'ai un plist mis en place comme celui-cipas à pas à travers un plist pour obtenir à info

Key   Type   Value 
Root   Array 
Item 0  Dictionary 
-Title  String  Part One 
-Description String  Welcome to part one. Have fun 
Item 1  Dictionary 
-Title  String  Part Two 
-Description String  Welcome to part two. Fun too. 
Item 2  Dictionary 
-Title  String  Part Three 
-Description String  Welcome to part three. It's free 
Item 3  Dictionary 
-Title  String  Part Four 
-Description String  It's part four. No more 

Comment pourrais-je pas à travers de mettre tous les titres en un seul tableau, et toutes les descriptions dans une autre?

Répondre

5

OOOOOOOO c'est là la génialité de codage valeur clé brille.

NSArray * plistContents = [NSArray arrayWithContentsOfFile:pathToPlist]; 
NSArray * titles = [plistContents valueForKey:@"Title"]; 
NSArray * descriptions = [plistContents valueForKey:@"Description"]; 

Le secret ici est que l'invocation valueForKey: sur un tableau retourne un nouveau tableau d'objets contenant le résultat d'invoquer valueForKey: sur chaque chose dans le tableau. Et appeler valueForKey: sur un dictionnaire peut être équivalent à utiliser objectForKey: (si la clé que vous utilisez est une clé dans une paire clé-valeur). Pour plus d'informations, voir the documentation. Un mot d'avertissement: L'utilisation d'une clé de "Description" peut potentiellement vous faire arracher des cheveux lorsque vous commencez à voir des résultats étranges, parce qu'une faute d'orthographe et que vous allez commencer à invoquer la méthode -description sur chaque dictionnaire (qui est pas ce que vous voulez).

+0

Dave DeLong se balance! J'étais à quelques secondes de poster. Impressionnant! – Jordan

1

Voir la Collections Programming Topics for Cocoa

NSArray *items = [[NSArray alloc] initWithContentsOfFile:@"items.plist"]; 
NSMutableArray *titles = [[NSMutableArray alloc] init]; 
NSMutableArray *descriptions = [[NSMutableArray alloc] init]; 

for (NSDictionary *item in items) { 
    [titles addObject:[item objectForKey:@"Title"]]; 
    [descriptions addObject:[item objectForKey:@"Description"]]; 
} 

[items release]; 

// Do something with titles and descriptions 

[titles release]; 
[descriptions release]; 
Questions connexes