我有这个问题,我使用CloudKit保存到icloud,但是立即获取结果不会返回插入的最新数据.
例
let todoRecord = CKRecord(recordtype: "Todos")
todoRecord.setValue(todo,forKey: "todotext")
publicDB.saveRecord(todoRecord,completionHandler: { (record,error) -> Void in
NSLog("Saved in cloudkit")
let predicate = nspredicate(value: true)
let query = CKQuery(recordtype: "Todos",predicate: predicate)
self.publicDB.performQuery(query,inZoneWithID: nil) {
results,error in
if error != nil {
dispatch_async(dispatch_get_main_queue()) {
self.delegate?.errorUpdating(error)
return
}
} else {
NSLog("###### fetch after save : \(results.count)")
dispatch_async(dispatch_get_main_queue()) {
self.delegate?.modelUpdated()
return
}
}
}
结果:
Before saving in cloud kit : 3 CloudKit[22799:882643] Saved in cloudkit CloudKit[22799:882643] ###### Count after save : 3
我在这里缺少一些东西吗?
解决方法
当记录保存在CloudKit中时以及索引是否已被该记录中的值更新时,存在延迟.
当CKModifyRecordsOperation成功完成时,您可以通过其记录标识符立即获取该记录.
但是,当记录被添加到服务器上的搜索索引时,存在延迟,并且查询将不会立即找到该记录.
如果您使用CKQuery来返回视图,则需要保留已在本地进行修改的记录的边表,并将其注入视图,直到查询开始返回该记录.