我正试图让子查询谓词起作用,我正在努力。
我有两个实体。
[联赛]< ---->> [游戏]
游戏有一个属性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]];
然而,当我使用它时,我似乎没有得到任何结果。
我是否正确编写了谓词?
有更好的方法吗?
答案 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
回答谓词以进行测试。
如果仍然没有结果,请检查执行请求期间是否存在错误,并正确初始化数据堆栈。