我正在尝试让子查询谓词起作用,但我正在努力。
我有两个实体。
[联赛] <---->> [比赛]
游戏有一个属性kickOffDate
。
我想使用谓词来返回所有 Leagues
,这些 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]];
但是,当我使用它时,我似乎没有得到任何结果。
我是否正确编写了谓词?
有更好的方法吗?
最佳答案
您是否尝试过(未测试):
[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
来回答谓词以对其进行测试。
如果仍然没有结果,请检查在执行请求期间是否有错误以及您的数据堆栈是否已正确初始化。
关于ios - 核心数据子查询谓词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18051948/