2010-04-13 80 views
4

我正在尝试创建一个NSPredicate,以在某个日期范围内查找包含“会话”的“项目”。我想这首先:核心数据ANY BETWEEN谓词

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

但我得到一个异常:

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

看来间不与任何以这种方式工作。我也限制使用的()和AND子句的意思是,我不能使用这样的:如果我尝试,我得到一个解析错误

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

。当然sessions.date是一个真正的集合,所以这样做并没有太大的意义。

我该怎么做?

感谢

UPDATE:需要注意的是这样的:

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

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

回答

11

我认为这是你需要一个SUBQUERY表达的情况下:

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

哇,我从来不知道SUBQUERY。谢谢,这工作。 – 2010-04-13 20:06:40

+0

SUBQUERY的东西有点埋在NSExpression文档中,并没有在Core Data特定的指南中得到很多处理。肯定地提出一个增强请求,并让苹果伙计们知道你会在哪里找到它(但没有找到你需要的信息)。 – 2010-04-13 23:39:52