计算查询核心数据谓词

时间:2016-05-05 14:15:39

标签: ios swift core-data predicates

我有一个名为schedule的实体,它有许多警报(其他实体),我想只获得具有少于30个未来警报的日程表。搜索周围我得到的查询不起作用/:

 let predicateFutureAlarms = NSPredicate(format: "(alarms.date > %@).@count < 30", NSDate().timeIntervalSince1970)

(在运行时a(lldb)出现在控制台上并指定该变量的初始化)

1 个答案:

答案 0 :(得分:3)

至少有两个问题:

  • "(alarms.date > %@).@count < 30"不是有效的谓词语法。
  • %@占位符需要对象,但NSDate().timeIntervalSince1970是浮点数字

我目前无法测试,但这样的事情应该有效:

let now = NSDate()
let predicate = NSPredicate(format: "SUBQUERY(alarms, $a, $a.date > %@).@count < 30", now)

对于每个Schedule对象,SUBQUERY(...)评估所有相关的alarms对象 date大于now

有关谓词的一般说明,请参阅"Predicate Format String Syntax" 句法。 &#34; SUBQUERY&#34;表达记录很少, 比较NSExpression class referenceQuick Explanation of SUBQUERY in NSPredicate Expression