如果我有这样的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
我将如何逐步将所有标题放在一个数组中,将所有描述放到另一个数组中?
答案 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];