4

我正在尝试创建一个 NSPredicate 来查找在某个日期范围内包含“会话”的“项目”。我一开始试过这个:

[NSPredicate predicateWithFormat:@"ANY sessions.date BETWEEN {$STARTDATE, $ENDDATE}"];

但我得到一个例外:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason:
   'to-many key not allowed here'

似乎 BETWEEN 不能以这种方式与 ANY 一起使用。我在使用 () 和 AND 子句方面也受到限制,这意味着我不能使用以下内容:

[NSPredicate predicateWithFormat:@"ANY (sessions.date > $STARTDATE && sessions.date < $ENDDATE)"];

如果我尝试这样做,我会收到解析错误。当然,sessions.date 确实是一个集合,所以像这样对它进行与运算并没有多大意义。

我怎样才能做到这一点?

谢谢

更新:请注意:

[NSPredicate predicateWithFormat:@"ANY sessions.date > $STARTDATE && ANY sessions.date < $ENDDATE"];

不正确,因为它返回一个项目,其中一个会话大于开始日期,另一个会话小于结束日期,但两者之间没有会话。

4

1 回答 1

11

我认为这是您需要SUBQUERY表达式的情况:

[NSPredicate predicateWithFormat:@"SUBQUERY(sessions, $s, $s.date BETWEEN {$STARTDATE, $ENDDATE}).@count > 0"];
于 2010-04-13T16:47:18.353 回答