使用stackoverflows搜索花了大约一周但没有运气......
这就是我所拥有的:
1 plist:
<plist version="1.0">
<array>
<dict>
<key>name</key>
<string>Name 1</string>
<key>abrev</key>
<string>(HGB, ΗbA)</string>
<key>picture</key>
<string>first.png</string>
<key>pictureHeight</key>
<integer>1686</integer>
</dict>
<dict>
<key>name</key>
<string>Name 2</string>
<key>abrev</key>
<string> </string>
<key>picture</key>
<string>second.png</string>
<key>pictureHeight</key>
<string>396</string>
</dict>
<dict>
...
<dict>
</array>
</plist>
问题是:
如何返回键“picture”和“pictureHeight”的值
知道键“name”的值。
我试过这样的事情,但绝望地失败了......
//creating an array that contains the plist
dictArray = [[NSArray alloc] initWithContentsOfFile:[[NSBundle mainBundle]
pathForResource:@"table1" ofType:@"plist"]];
//creating an array that contains only the vlaues for key "name"
NSMutableArray *temp = [dictArray valueForKey:@"name"];
//searchedData - an NSMutableArray containing the "name" values that
//the user searched using the searchbar
for (i=0; i<[searchedData count]; ++i)
{
if ([searchedData containsObject:[temp objectAtIndex:i]])
{
[temp removeObjectAtIndex:i];
}
}
最后我有一个关键字“name”的值数组,我需要获取“picture”和“pictureHeight”将所有这些信息推送到下一个视图控制器......
我正在寻找任何新鲜的想法(或者可能是教程),因为我对自己的想法并不太远......
答案 0 :(得分:4)
使用NSPredicate和NSArray的-filteredArrayUsingPredicate:方法选择数组中的字典,其中键'name'的值与您要查找的内容相匹配。然后,您可以通常的方式查询生成的字典或词典,即使用objectForKey:。
NSPredicate是非常强大的,值得花时间学会使用它,但它需要一些研究。如果你想要一些更容易实现但不那么优雅的东西,只需自己遍历数组:
NSMutableArray *matches = [NSMutableArray array];
for (NSDictionary *d in searchedData) {
if ([name isEqualToString: [d objectForKey:@"name"]]) {
[matches addObject:d];
}
}
同样,您最终会得到一个包含字典的数组,其中“name”与您要查找的名称相匹配,您可以通常的方式获取其他属性。