ios - 核心数据子查询谓词

标签 ios objective-c core-data subquery nspredicate

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

我有两个实体。

[联赛] <---->> [比赛]

游戏有一个属性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/

相关文章:

ios - UITableViews 和 UITableViewCells

objective-c - NSMutableRLEArray objectAtIndex:effectiveRange::越界

ios - 核心数据一对多关系在获取新对象后失去关系

ios - 核心数据 - 2 个对象模型,1 个或 2 个托管对象上下文 - 哪个更好?

ios - Xcode 从顶级对象获取对象

ios - 如何在动画结束时实例化 viewController?

ios - 类中的 extern NSString *const。

ios - 如何直接通过点击通知警报打开深埋在 View 层次结构中的 View Controller

objective-c - UItableviewcell 中的按钮

cocoa - 重命名时不会加载核心数据模型文件