Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

CloudKit not returning the most recent data

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?

like image 468
Shrikar Avatar asked Oct 15 '14 05:10

Shrikar


1 Answers

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.

like image 87
farktronix Avatar answered Nov 06 '22 08:11

farktronix