NSDictionary对子对象进行谓词过滤

时间:2012-08-19 18:38:45

标签: ios nsdictionary nspredicate

我正在尝试过滤来自Facebook API的响应,JSON看起来像这样:

{ 
 "Data": [
  {  
    "first_name" : "Joe",
    "last_name" : "bloggs",
    "uuid" : "123"
  },
  {  
    "first_name" : "johnny",
    "last_name" : "appleseed",
    "uuid" : "321"
  }
 ]
}

我将其加载到NSDictionary中,像[[friendDictionary objectForKey:@"data"] allObjects]

一样访问它

我现在正尝试根据有人在文本字段中输入名称时根据first_namelast_name进行过滤。这是我所拥有的,但它的失败可怕:

  NSPredicate *filter = [NSPredicate predicateWithFormat:[NSString stringWithFormat:@"ANY.first_name beginswith[c] %@ OR ANY.last_name beginswith[c] %@", friendField.text, friendField.text]];
  NSLog(@"%@", [[[friendDictionary objectForKey:@"data"] allObjects] filteredArrayUsingPredicate:filter]);

非常感谢任何帮助,谢谢你们

1 个答案:

答案 0 :(得分:5)

你的想法太复杂了。

    {li} stringWithFormatpredicateWithFormat内没有任何意义。
  • 谓词中不需要“ANY”聚合,与核心数据对象中的多对多关系一起使用。
  • [friendDictionary objectForKey:@"Data"]返回一个数组,此处allObjects错误。
  • 关键是“数据”,而不是“数据”。

这给了

NSPredicate *filter = [NSPredicate predicateWithFormat:@"first_name beginswith[c] %@ OR last_name beginswith[c] %@",
    friendField.text, friendField.text];
NSArray *filteredArray = [[friendDictionary objectForKey:@"Data"] filteredArrayUsingPredicate:filter];