核心数据子查询谓词

时间:2013-08-05 06:39:04

标签: ios objective-c core-data subquery nspredicate

我正试图让子查询谓词起作用,我正在努力。

我有两个实体。

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

游戏有一个属性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 >= %@).@count > 0", [self startOfDay:[NSDate date]]];
NSPredicate *endOfDayPredicate = [NSPredicate predicateWithFormat:@"SUBQUERY(games, $g, $g.kickOffDate <= %@).@count > 0", [self endOfDay:[NSDate date]]];

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

然而,当我使用它时,我似乎没有得到任何结果。

我是否正确编写了谓词?

有更好的方法吗?

1 个答案:

答案 0 :(得分:5)

你有没有尝试过(未经测试):

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

==具有在给定范围内开球日期的比赛的联赛

您的解决方案相当于:

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

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

哪个应该返回比你想要的更多的结果。

修改
正如@Martin R建议的那样,您应该验证您的数据确实包含League回答谓词以进行测试。
如果仍然没有结果,请检查执行请求期间是否存在错误,并正确初始化数据堆栈。