我有一个名为 schedule 的实体,它有很多警报(其他实体),我只想获得未来警报少于 30 个的时间表。到处搜索我得到那个不起作用的查询/:
let predicateFutureAlarms = NSPredicate(format: "(alarms.date > %@).@count < 30", NSDate().timeIntervalSince1970)
(在运行时(lldb)出现在控制台上并指定该变量的初始化)
我有一个名为 schedule 的实体,它有很多警报(其他实体),我只想获得未来警报少于 30 个的时间表。到处搜索我得到那个不起作用的查询/:
let predicateFutureAlarms = NSPredicate(format: "(alarms.date > %@).@count < 30", NSDate().timeIntervalSince1970)
(在运行时(lldb)出现在控制台上并指定该变量的初始化)
至少有两个问题:
"(alarms.date > %@).@count < 30"
不是有效的谓词语法。%@
占位符需要一个对象,但它NSDate().timeIntervalSince1970
是一个浮点数。我目前无法对其进行测试,但这样的事情应该可以工作:
let now = NSDate()
let predicate = NSPredicate(format: "SUBQUERY(alarms, $a, $a.date > %@).@count < 30", now)
对于每个Schedule
对象,SUBQUERY(...)
计算所有相关alarms
对象的 adate
大于now
。
有关谓词语法的一般描述,请参阅“谓词格式字符串语法”。“SUBQUERY”表达式的文档记录很差,比较NSPredicate Expression 中的NSExpression
类引用或SUBQUERY 的快速解释。