带有modificationDate的CloudKit查询始终不返回任何结果



我的目标是从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字段上创建了可查询索引

最新更新