1

编辑(我错过了一层细节):每个老师都有一系列的课程。(我也通过验证器运行了 JSON,所以它更容易阅读)假设以下 JSON:

{
"schools": [
    {
        "schoolID": "01",
        "schoolName": "School01",
        "teachers": [
            {
                "name": "Mr. Russell",
                "teacherID": "teach01",
                "classes": [
                    {
                        "className": "History",
                        "classID": "class01"
                    },
                    {
                        "className": "Civics",
                        "classID": "class02"
                    }
                ]
            },
            {
                "name": "Mrs. Pearl",
                "teacherID": "teach02",
                "classes": [
                    {
                        "className": "English",
                        "classID": "class05"
                    },
                    {
                        "className": "Poetry",
                        "classID": "class06"
                    }
                ]
            }
        ]
    },
    {
        "schoolID": "02",
        "schoolName": "School01",
        "teachers": [
            {
                "name": "Mr. Russell",
                "teacherID": "teach05",
                "classes": [
                    {
                        "className": "Pre-Calc",
                        "classID": "class10"
                    },
                    {
                        "className": "Calculus",
                        "classID": "class12"
                    }
                ]
            },
            {
                "name": "Mr. Marks",
                "teacherID": "teach07",
                "classes": [
                    {
                        "className": "History",
                        "classID": "class01"
                    },
                    {
                        "className": "Driving",
                        "classID": "class20"
                    }
                ]
            }
        ]
    }
]
}

即,我有一个学校数组,每个学校都包含一个教师数组,每个教师包含一个班级数组。(抱歉,如果 JSON 的确切格式不太正确;这是一个理论模型,因为由于 NDA 的要求,我无法透露真实的模型。实际模型是合理的。)

我需要使用 NSPredicate 和 KVC 对这个集合进行搜索,并获取所有名为“History”的类名。我尝试了几种不同的方式来执行它,但结果是空的。例如:

NSPredicate *pred = [NSPredicate predicateWithFormat:@"ANY schools.teachers.classes.className == %@", @"History"];

但我回来是空的。对于 KVC 可以执行的内容,我正在尝试的内容是否过于复杂?我是否需要遍历每个学校,然后遍历每个老师,然后才能搜索班级名称?或者,如果我想做的事情是可能的,我错过了什么?

谢谢。

4

1 回答 1

0

我假设通过

我需要 [...] 获取所有名为“History”的类名。

您的意思是获取与给定名称匹配的实际类字典。

我相信您的 JSON 字典对于 KVC 来说可能过于复杂,但仅在字典中的对象同时包含字典和数组的意义上,因此简单的谓词不能仅通过使用键来匹配。

我能够取回一组名称与“历史”匹配的类。我能够通过首先创建一个类数组然后过滤这些类来实现这一点。

NSDictionary *schoolsDictionary = ...
NSArray *schoolsArray = @[schoolsDictionary];

NSArray *classesArray = [schoolsArray valueForKeyPath:@"@unionOfArrays.schools.@unionOfArrays.teachers.@unionOfArrays.classes"];
NSArray *filteredClasses = [classesArray filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"className = %@", @"History"]];

在这种情况下,结果将是

(
{
    classID = class01;
    className = History;
},
{
    classID = class01;
    className = History;
}
)
于 2013-07-18T23:39:26.657 回答