2013-08-05 132 views
0

我想获得一个子查询谓词工作,我很挣扎。核心数据子查询谓词

我有两个实体。

[联盟] < ---- >> [游戏]

游戏有一个属性kickOffDate

我想使用谓词返回所有Leagues,它们至少有一个Game与今天的kickOffDate。

我使用这个谓词...

// startOfDay and endOfDay are functions to return the given date with 00:00:00 and 23:59:59 respectively 
NSPredicate *startOfDayPredicate = [NSPredicate predicateWithFormat:@"SUBQUERY(games, $g, $g.kickOffDate >= %@)[email protected] > 0", [self startOfDay:[NSDate date]]]; 
NSPredicate *endOfDayPredicate = [NSPredicate predicateWithFormat:@"SUBQUERY(games, $g, $g.kickOffDate <= %@)[email protected] > 0", [self endOfDay:[NSDate date]]]; 

NSPredicate *compoundPredicate = [NSCompoundPredicate andPredicateWithSubpredicates:@[startOfDayPredicate, endOfDayPredicate]]; 

然而,当我使用这个我似乎并没有得到任何结果。

我是否正确地编写了谓词?

有没有更好的方法来做到这一点?

回答

5

您是否尝试过(未经测试):

[NSPredicate predicateWithFormat:@"SUBQUERY(games, $g, $g.kickOffDate >= %@ AND $g.kickOffDate <= %@)[email protected] > 0", [self startOfDay:[NSDate date]],[self endOfDay:[NSDate date]]]; 

==联赛有一个开球日期游戏在给定的范围内

您的解决方案等同于:

[NSPredicate predicateWithFormat:@"ANY games.kickOffDate >= %@ AND ANY games.kickOffDate <= %@",start,end]; 

==有一个游戏在给定日期之后开始并且具有在给定日期之前开始的游戏的联盟(可以是不同的游戏或相同的游戏)

哪个应该会返回比您喜欢的更多结果。

编辑:
作为@马丁 - [R建议,你应该确认你的数据确实包括League回答谓词来测试它。
如果仍然没有结果,请检查执行请求期间是否有错误,并且数据堆栈已正确初始化。

+0

是的,看起来是正确的。我唯一想知道的是OP没有用他的谓词得到任何结果 - 它应该给出太多的结果。 –

+0

使用SubQuery代替复合谓词会更好吗?哪一个在什么时候使用? – Satyam