Подтвердить что ты не робот

CloudKit не возвращает самые последние данные

У меня возникает эта проблема, когда я сохраняю что-то в icloud с помощью CloudKit, но сразу же извлекает результаты, не возвращает последние вставленные данные.

Пример

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

Я пропустил что-то здесь, ребята?

4b9b3361

Ответ 1

Задержка между тем, когда запись сохраняется в CloudKit, и когда индексы были обновлены значениями из этой записи.

Когда a CKModifyRecordsOperation завершается успешно, вы можете сразу извлечь эту запись через свой идентификатор записи.

Однако есть задержка, пока запись добавляется в поисковые индексы на сервере, и запросы не найдут эту запись немедленно.

Если вы используете CKQuery для возврата к представлению, вы хотите сохранить боковую таблицу записей, которые были изменены локально, и сшить их в представление до тех пор, пока запрос не начнет возвращать эту запись.