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

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

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

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

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

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

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

【问题讨论】:

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

标签: ios objective-c core-data nspredicate


【解决方案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]; 
    

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

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 2021-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多