使用NSPredicate过滤包含字典的数组数组

时间:2014-04-14 04:43:11

标签: ios objective-c nsarray nsdictionary nspredicate

我有一个名为charactersAndDescriptions的数组,其中包含多个数组,并且每个数组中都有一个带有两个键/值的NSDictionary。它看起来像这样:

enter image description here

我需要在键的值上过滤此数组' desc,'将它与字符串变量searchText进行比较(它应返回结果,其中该字符串存在于desc中的任何位置)。我希望返回的结构与原始结构相同 - 包含数组内字典的数组。这是我的代码:

NSPredicate *resultPredicate = [NSPredicate predicateWithFormat:@"desc contains[c] %@", searchText];
self.resultsArray = [self.charactersAndDescriptions filteredArrayUsingPredicate:resultPredicate];

问题是,self.resultsArray总是返回0个对象。我不明白为什么会这样。我在这里看问题,他们只有一个字典数组但是找不到任何嵌套数组。希望你能帮忙,谢谢!

1 个答案:

答案 0 :(得分:3)

我不确定你是否可以用一个谓词来做。但是您可以遍历各个字典数组,过滤它们并将过滤后的列表添加到最终数组中。尝试这样的事情:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"desc contains[c] %@", searchText];
NSMutableArray *finalColletion = [NSMutableArray array];
for (NSArray *temp in self.charactersAndDescriptions) {
    NSArray *result =[temp filteredArrayUsingPredicate:predicate];
    if([result count] > 0) {
        [finalColletion addObject:result];
    }
}
相关问题