使用" timeIntervalSinceNow"在SWIFT的谓词中

时间:2014-12-10 12:54:45

标签: ios swift ios8 nspredicate cloudkit

我正在尝试使用Cloudkit(在SWIFT中)查询过去1小时内创建的记录

我试过了:

let predicate = NSPredicate(predicateWithFormat : "timeIntervalSinceNow %@ < %f", "creationTime", -3600)

没有成功。错误消息指的是解析错误。

任何人都知道什么是正确的格式?

n.b creationTime是表

中字段的名称

1 个答案:

答案 0 :(得分:2)

您的谓词无效。看看Apple's guide for creating NSPredicates

您应该在表达式的左侧使用key path。我假设你有一个对象数组,这些对象有一个名为creationTime的属性。那么谓词应该是这样的:

NSPredicate(format: "creationTime.timeIntervalSinceNow > %d", -3600)

请注意,我在您发布的谓词中使用了“大于”>运算符而不是<。这是因为过去的日期将从timeIntervalSinceNow方法返回负值,如documentation个州。

编辑: 似乎您无法在CloudKit谓词中使用关键路径。但我认为你可以创建一个参考日期(一小时前)并将其用于比较谓词:

let now = NSDate()
if let anHourAgo = NSCalendar.currentCalendar().dateByAddingUnit(
    .HourCalendarUnit,
    value: -1,
    toDate: now,
    options: NSCalendarOptions(0)) {
        let predicate = NSPredicate(format: "creationDate > %@", anHourAgo)
        let filtered = records.filteredArrayUsingPredicate(predicate!)
}