使用不同的密钥访问NSDictionary中的密钥值

时间:2011-03-07 16:56:20

标签: iphone objective-c ios nsdictionary

使用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”将所有这些信息推送到下一个视图控制器......

我正在寻找任何新鲜的想法(或者可能是教程),因为我对自己的想法并不太远......

1 个答案:

答案 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”与您要查找的名称相匹配,您可以通常的方式获取其他属性。