NSPredicate获得具有特定课程名称的所有学生?

时间:2014-01-10 03:57:36

标签: ios objective-c core-data nspredicate

我有两个实体,即学生和课程,其中每个实体与另一个实体有多对多关系(即,学生有0个或更多课程,课程有0个或更多学生)。

我需要获得所有注册课程的学生。我还需要获得给定学生注册的所有课程(通过firstName)。

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

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

  1. 获得具有特定课程名称的所有学生的有效NSPredicate是什么?
  2. 什么是有效的NSPredicate,用于获得具有特定firstName的学生注册的所有课程。
  3. 供您参考,以下是我的实体:

    enter image description here

2 个答案:

答案 0 :(得分:1)

1)使用此功能过滤使用students的特定课程中的courseName数组:

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

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

students

2)使用此功能过滤具有某个course.students // returns an NSSet/NSOrderedSet based on your model setup 学生的courses数组:

firstName

注意:[NSPredicate predicateWithFormat:@"ANY students.firstName like %@", firstName] NSSet有一个方法NSOrderedSet来获取对象数组。

另请参阅使用带关键路径的谓词下的NSPredicate上的文档。

答案 1 :(得分:1)

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

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

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

Course *course = [fetchedResults objectAtIndex:0];

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

NSArray *students =[course.students allObjects];

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

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

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

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

Student *student = [fetchedResults objectAtIndex:0];

现在为该学生开设所有课程,

NSArray *courses =[student.courses allObjects]; 

现在,课程是一系列“课程”实体对象。

希望这有帮助。