我的目标是从CloudKit中获取User
记录,我在CKRecord.ID
的数组中指定了这些记录,但前提是这些记录的更新时间比我在本地跟踪的上次更新日期晚。
我正在进行以下CloudKit查询:
var predicate:NSPredicate
if let lastChecked = defaults.object(forKey: "lastUserFetch") as? Date{
//Subsequent fetches
predicate = NSPredicate(format: "modificationDate > %@ AND recordID IN %@", argumentArray: [lastChecked, userRecordIDs])
}else{
//First fetch
predicate = NSPredicate(format: "recordID IN %@", argumentArray: [userRecordIDs])
}
let query = CKQuery(recordType: "User", predicate: predicate)
let operation = CKQueryOperation(query: query)
...
当我的应用程序启动时,我最初将lastUserFetch
设置为nil
;第一次获取";部分查询成功。我取回了所有的用户记录。
但一旦我在查询完成后设置了lastUserFetch
日期:
defaults.set(Date(), forKey: "lastUserFetch")
当包含modificationDate > %@
部分时,我得到返回的0
记录。I、 当然,在CloudKit Dashboard中修改记录,我可以看到它们的modificationDate
已经更新,并且比我的lastUserFetch
日期更新,但它们仍然不会在我的搜索结果中返回。
如何将modificationDate
比较与recordID IN
查询相结合?
使用NSCompoundPredicate:
var predicate:NSPredicate
//Every fetch
predicate = NSPredicate(format: "recordID IN %@", argumentArray: [userRecordIDs])
if let lastChecked = defaults.object(forKey: "lastUserFetch") as? Date{
//Subsequent fetches
predicate = NSCompoundPredicate(andPredicateWithSubpredicates: [predicate, NSPredicate(format: "modificationDate > %@", argumentArray: [lastChecked]))
}
let query = CKQuery(recordType: "User", predicate: predicate)
let operation = CKQueryOperation(query: query)
...
确保在cloudKit 的modificationDate字段上创建了可查询索引