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
Я пропустил что-то здесь, ребята?
Ответы
Ответ 1
Задержка между тем, когда запись сохраняется в CloudKit, и когда индексы были обновлены значениями из этой записи.
Когда a CKModifyRecordsOperation
завершается успешно, вы можете сразу извлечь эту запись через свой идентификатор записи.
Однако есть задержка, пока запись добавляется в поисковые индексы на сервере, и запросы не найдут эту запись немедленно.
Если вы используете CKQuery
для возврата к представлению, вы хотите сохранить боковую таблицу записей, которые были изменены локально, и сшить их в представление до тех пор, пока запрос не начнет возвращать эту запись.