从过滤关系为空的核心数据中获取对象

Fetch objects from Core Data where a filtered relationship is empty

假设我有 Employee 个对象,它们与名为 shiftsWorkShift 个对象具有一对多关系。 WorkShift 有一个 startDate 属性 标记该转变何时开始。

我想获取所有未在两个日期之间开始工作的员工,即如果 Employee 在 A 和 B 日期之间有 0 WorkShift 条记录 startDate,然后我想将 Employee 包含在我的结果集中。

如果我只需要找到shifts完全为空的员工,我相信我可以只使用shifts.@count = 0的谓词,但我需要根据[过滤shifts =14=] 然后检查 @count = 0,但我不知道如何在谓词中执行此操作。

有什么建议吗?

我根据其他一些讨论 SUBQUERY

的帖子设法弄明白了
NSPredicate *predicate = [NSPredicate predicateWithFormat:
    @"SUBQUERY(shifts, $x, %@ <= $x.startDate and $x.startDate <= %@).@count == 0",
    beginningOfDateRange, endingOfDateRange);

SUBQUERY函数将所讨论的关系(集合)作为第一个参数。第二个参数只是一个变量定义,表示当我在第三个参数中构建条件时,我将使用 $x 来引用关系集合中的每个项目。然后,当然,第三个参数是我用来减少集合的过滤器。我正在寻找我的两个日期之间 startDateWorkShift 记录..但是我想要所有 Employees 没有的记录,所以我使用子查询来查找所有该范围内的 WorkShift 记录,然后我检查 .@count == 0 以确保该范围内没有任何记录。

有点费脑筋,但效果很好。