通过一个plist步进获取信息

时间:2010-05-18 15:10:00

标签: iphone objective-c nsarray plist

如果我有这样的plist设置

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

我将如何逐步将所有标题放在一个数组中,将所有描述放到另一个数组中?

2 个答案:

答案 0 :(得分:5)

Oooooooo这就是Key-Value Coding令人敬畏的地方。

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

这里的秘密是在数组上调用valueForKey:会返回一个新的对象数组,其中包含对数组中每个事物调用valueForKey:的结果。在字典上调用valueForKey:可以等同于使用objectForKey:(如果您使用的密钥是键值对中的密钥)。有关详细信息,请参阅the documentation

提醒一句:当您开始看到奇怪的结果时,使用“描述”键可能会导致您撕掉一些头发,因为一个拼写错误并且您实际上会开始在每个头发上调用-description方法字典(不是你想要的东西)。

答案 1 :(得分:1)

请参阅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];