NSPredicate 过滤关系

Posted

技术标签:

【中文标题】NSPredicate 过滤关系【英文标题】:NSPredicate filter relationship 【发布时间】:2017-06-27 22:37:39 【问题描述】:

我在我的项目中使用 CoreData 和 NSFetchedResultsController。我有 2 个实体学校和学生,一对多的关系。一所学校可以有多个学生。

我正在尝试按学校名称过滤学校,然后按年级过滤学生,这样我得到一个过滤学校,其中只包含与特定年级匹配的学生。

    let fetchRequest = NSFetchRequest<School>(entityName: "School")
    let predicate = NSPredicate(format: "name = %@ AND ANY students.grade","School 2", "F")

上面提到的谓词代码的问题是它返回给我一个“学校 2”,所有学生都有,而只有一个学生的成绩是“F”。

我需要一个只包含“F”级学生的学校实体。

【问题讨论】:

【参考方案1】:

您获取的学校对象将始终提供与其关系中与您获取对象的方式无关的所有值。你可以做的是过滤学生。所以你有一套school.students 和第二套只包含不及格的学生。因为学生的过滤是在内存中,所以你不限于核心数据属性,但它也可能会慢一些。

【讨论】:

以上是关于NSPredicate 过滤关系的主要内容,如果未能解决你的问题,请参考以下文章

将关系过滤器添加到 NSPredicate

核心数据:过滤多对可能与 NSPredicate 的关系

NSPredicate 按属性过滤核心数据关系 NSSet

在一对多关系中使用 NSPredicate 进行过滤

如何根据多对关系集是不是包含特定值使用 NSPredicate 进行过滤

用于多对多关系的 NSPredicate 过滤器