我正在尝试使用Cloudkit(在SWIFT中)查询过去1小时内创建的记录
我试过了:
let predicate = NSPredicate(predicateWithFormat : "timeIntervalSinceNow %@ < %f", "creationTime", -3600)
没有成功。错误消息指的是解析错误。
任何人都知道什么是正确的格式?
n.b creationTime
是表
答案 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!)
}