I am having this issue where I save something to the icloud using CloudKit but immediately fetching the results doesn't return the latest data inserted.
Example
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
}
}
}
Result :
Before saving in cloud kit : 3
CloudKit[22799:882643] Saved in cloudkit
CloudKit[22799:882643] ###### Count after save : 3
Am I missing something here guys?
There is a delay between when a record is saved in CloudKit and when the indexes have been updated with values from that record.
When a CKModifyRecordsOperation
completes successfully you are able to immediately fetch that record via its record identifier.
However, there is a delay while the record is added to the search indexes on the server and queries won't find that record immediately.
If you're using a CKQuery
to back a view you'll want to keep a side table of records that have been modified locally and stitch those into the view until the query starts returning that record.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With