CoreData计数TWICE相关实体的记录

时间:2013-04-28 17:31:58

标签: ios objective-c core-data relation

我有三个实体:机构,课程,学生 一个机构可以有很多课程,一个课程只能有一个机构(1 - 多个) 课程可以有很多学生,学生可以参加很多课程(很多 - 很多)。

计算机构的课程非常简单,其关系名为“课程”:

int numberCourses = institution.course.count;

我的问题:

我如何计算机构中的学生人数? 在实体课程中,我与实体学生有“学生”关系。如何从通过课程到学生访问?

注意:学生可以成为许多课程的成员,因此他可以成为许多院校的成员。

说它简单,类似于上面的代码行,我想要这个:

  

机构 - > 所有课程 - > student.count

谢谢你的帮助!! 下进行。

1 个答案:

答案 0 :(得分:2)

有两种不同的解决方案。你可以得到该机构的所有学生和 算上他们:

NSSet *students = [institution valueForKeyPath:@"courses.students"];
NSUInteger numberOfStudents = [students count];

(我已经使用了复数形式来实现多种关系,我发现它更直观。)

或者您为与该机构相关的学生构建了获取请求:

NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Student"];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ANY courses.institution == %@", institution];
[request setPredicate:predicate];
NSUInteger numberOfStudents = [context countForFetchRequest:request error:&error];

第二种解决方案的优点是 Student 对象和中间 Course 对象不会加载到内存中。完成对象数量的计数 在SQLite级别。