从Core Data中获取过滤关系为空的对象

时间:2016-05-09 00:36:48

标签: ios core-data nspredicate

我们说我有Employee个与WorkShiftshifts个对象有{1}个关系的对象。WorkShift startDate具有Employee属性,用于标记何时开始转换。

我想获取所有未在两个日期之间开始工作的员工,即如果WorkShift在A和B日期之间有startDateEmployee个记录,那么我想在我的结果集中包含shifts

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

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

我设法根据其他一些关于SUBQUERY

的帖子来解决这个问题
NSPredicate *predicate = [NSPredicate predicateWithFormat:
    @"SUBQUERY(shifts, $x, %@ <= $x.startDate and $x.startDate <= %@).@count == 0",
    beginningOfDateRange, endingOfDateRange);

SUBQUERY函数将有问题的关系(集合)作为第一个参数。第二个参数只是一个变量定义,当我在第三个参数中构建条件时,我将使用$x来引用关系集合中的每个项目。然后,当然,第三个参数是我用来减少集合的过滤器。我在两个日期之间查找了WorkShift startDateEmployees个记录..但我希望所有WorkShift都没有,所以我使用子查询找到该范围内的所有.@count == 0条记录,然后检查{{1}}以确保该范围内没有任何记录。

有点大脑扭曲,但它就像一个魅力。