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]
注意:NSSet
和 NSOrderedSet
有一个方法 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 用于从一对多关系中获取项目,不包括特定的相关实体