核心数据ANY BETWEEN谓词

时间:2010-04-13 15:04:18

标签: iphone core-data nspredicate

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

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

但我得到一个例外:

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

似乎BETWEEN不能以这种方式与任何人合作。我也限制使用()和AND子句,这意味着我不能使用类似的东西:

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

如果我尝试,我会得到一个解析错误。当然,sessions.date实际上是一个集合,因此对它来说并不是很有意义。

我该怎么做?

由于

更新:请注意:

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

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

1 个答案:

答案 0 :(得分:11)

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

[NSPredicate predicateWithFormat:@"SUBQUERY(sessions, $s, $s.date BETWEEN {$STARTDATE, $ENDDATE}).@count > 0"];