NSPredicate 用于获取具有特定课程名称的所有学生?

Posted

技术标签:

【中文标题】NSPredicate 用于获取具有特定课程名称的所有学生?【英文标题】:NSPredicate for obtaining all Students with a certain Course name? 【发布时间】:2014-01-10 03:57:36 【问题描述】:

我有两个实体,Student 和 Course,每个实体与另一个实体具有一对多的关系(即,一个 Student 有 0 个或多个 Courses,一个 Course 有 0 个或多个 Student)。

我需要获取所有已注册课程的学生。我还需要获取给定学生注册的所有课程(按名字)。

伪谓词是:所有课程名称等于 courseName 的学生

所以我的问题包括两部分:

    获取具有特定课程名称的所有学生的有效 NSPredicate 是什么? 什么是有效的 NSPredicate,用于获取具有特定名字的学生注册的所有课程。

以下是我的实体供您参考:

【问题讨论】:

在您的NSManagedObject 子类中将有一个NSSet 属性,它为课程对象返回学生,为学生对象返回课程。 如果您对任何答案感到满意,请将其标记为正确。 :) @santhu 可以。需要先尝试一下。谢谢! 【参考方案1】:

1) 使用它来过滤students 的数组,这些students 在特定课程中使用courseName

[NSPredicate predicateWithFormat:@"ANY courses.name like %@", courseName]

或者,如果您已经有一个course 对象(并且name 在调用course 对象中是唯一的),您可以通过访问其students 属性来简单地获取其所有学生,即

course.students // returns an NSSet/NSOrderedSet based on your model setup

2) 使用它来过滤具有特定firstName 的学生的courses 数组:

[NSPredicate predicateWithFormat:@"ANY students.firstName like %@", firstName]

注意:NSSetNSOrderedSet 有一个方法 array 来获取对象数组。

另请参阅NSPredicate 上的文档Using Predicates with Key-Paths

【讨论】:

【参考方案2】:

获取具有特定课程名称的所有学生的有效 NSPredicate 是什么?

[NSPredicate predicateWithFormat:@"name= %@", courseName];

使用上面的谓词来获取特定的课程,而有 name = courseName;将该谓词设置在“Course”实体而不是“Student”实体上。 执行上述 fetch 请求后,您将拥有具有该 courseName 的课程数组。

Course *course = [fetchedResults objectAtIndex:0];

现在让所有学生参加该课程,

NSArray *students =[course.students allObjects];

现在学生是一个“学生”实体对象的数组。

同样, 什么是有效的 NSPredicate 用于获取具有特定名字的学生注册的所有课程。

[NSPredicate predicateWithFormat:@"firstName = %@", name];

使用上述谓词获取 name = firstName 的特定学生;将该谓词设置在“学生”实体上。 执行上述提取请求后,您将拥有一组具有该名字的学生。

Student *student = [fetchedResults objectAtIndex:0];

现在获取该学生的所有课程,

NSArray *courses =[student.courses allObjects]; 

现在课程是“课程”实体对象的数组。

希望这会有所帮助。

【讨论】:

以上是关于NSPredicate 用于获取具有特定课程名称的所有学生?的主要内容,如果未能解决你的问题,请参考以下文章

NSPredicate 用于从一对多关系中获取项目,不包括特定的相关实体

NSPredicate 不适用于核心数据中的抽象实体属性

使用 nspredicate 获取具有最大属性值的实体以及一个关系

使用 NSPredicate 获取核心数据对象数组?

NSPredicate,使用一对多关系的子集获取结果

核心数据 - NSPredicate 用于具有相同列且满足另一个条件的对象