0

我正在做一个项目,我正在下载一大堆 JSON,然后用它制作一个漂亮的 UITableView。

我已将 JSON 解析为一个不错的 NSMutableArray,然后将其输入 UITableView。一切正常,看起来很漂亮。

我遇到的问题是我的 NSMutableArray 中有一个字典对象,我想用它来执行表视图的过滤。

这是我正在查看的 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 的变体,但我只是被卡住了。

4

2 回答 2

2

如果我正确理解了问题,则以下谓词应该有效:

[NSPredicate predicateWithFormat:@"ANY issues.name == %@", @"Human"]

这给出了数组中的所有对象,其中至少一个“问题”的“名称”等于“人类”。

于 2013-03-04T12:26:39.420 回答
0

我编写了一个类别方法库,称为Linq to ObjectiveC,它使这类事情变得更容易一些。据我所知,您有一个项目数组,其中每个项目都有一个名为的属性issues,它本身就是一个数组?

如果要查找所有具有名为“人类”的问题的项目,可以执行以下操作:

NSArray* matches = [inputArray where:^BOOL(id item) {
    return [[item issues] any:^BOOL(id issue) {
        return [[issue name] equalTo:@"Human"];
    }];
}]

这使用了 Linq to ObjectiveC whereany方法。

于 2013-03-10T18:43:28.720 回答