我正在开发一个项目,我正在下载一大堆JSON,然后用它制作漂亮的UITableView。
我已经将JSON解析为一个很好的NSMutableArray,然后我将其输入到UITableView中。一切正常,看起来很漂亮。
我遇到的问题是我的NSMutableArray中有一个字典对象,我想用它来执行tableview的过滤。
这是我正在查看的NSMutableArray中对象的NSLog:
{
id = 123456;
issues = (
{
id = 4;
name = "Ape";
},
{
id = 25;
name = "Chimp";
},
{
id = 28;
name = "Human";
}
);
status = open;
}
我想写的是NSMutableArray中问题字典中任何名称列的谓词过滤器。
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"%K == %@", @"name", @"Human"];
NSArray *predicateFilteredArray = [tableViewArray filteredArrayUsingPredicate:predicate];
但是,我无法找出与问题中的名称匹配的谓词变量的正确格式。我已阅读并重新阅读谓词编程指南,大约一半的堆栈溢出项标记为NSPredicate,我无法弄清楚语法。 我已经尝试了很多SELF的变化,而且我只是很老了。
答案 0 :(得分:2)
如果我正确理解了问题,则以下谓词应该有效:
[NSPredicate predicateWithFormat:@"ANY issues.name == %@", @"Human"]
这给出了数组中的所有对象,其中至少有一个“问题”的“名称”等于“人”。
答案 1 :(得分:0)
我编写了一个名为Linq to ObjectiveC的类别方法库,这使得这类事情变得容易一些。从我可以收集到的内容中,您有一系列项目,其中每个项目都有一个名为issues
的属性,它本身就是一个数组?
如果要查找名为“人”的问题的所有项目,可以执行以下操作:
NSArray* matches = [inputArray where:^BOOL(id item) {
return [[item issues] any:^BOOL(id issue) {
return [[issue name] equalTo:@"Human"];
}];
}]