我有一个名为schedule的实体,该实体有很多警报(其他实体),我只想获取 future 少于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对象,这些对象具有
    一个大于datenow

    有关谓词的一般说明,请参见"Predicate Format String Syntax"
    句法。 “SUBQUERY”表达式的文档很少,
    比较 NSExpression class referenceQuick Explanation of SUBQUERY in NSPredicate Expression

    09-07 11:16