В этом случае - я использую простой UITableView, который отображает записи из CloudKit publicDB. Когда я запускаю приложение, операция запроса возвращает, например, возвращает 2 результата (это все, что у него есть в настоящее время).CloudKit - результаты CKQueryOperation разные при каждом запуске одного и того же запроса
В моем представлении таблицы есть элемент управления обновлением, и когда я пытаюсь обновить, я получил нулевые результаты, если я продолжу выполнять перезагрузки, в конечном итоге результат может выйти, но теперь всегда.
То же самое случается с большим количеством результатов, а также, я использовал, чтобы иметь тип CKLocation, который спросил я, и ответ всегда отличался без какого-либо здравого смысла
Некоторые примеры кода (предикат в данном случае TRUEPREDICATE - ничего фантазии):
let sort = NSSortDescriptor(key: "creationDate", ascending: false)
let query = CKQuery(recordType: "Tests", predicate: DiscoveryMode.getPredicate())
query.sortDescriptors = [sort]
var operation = CKQueryOperation(query: query)
if lastCursor != nil {
operation = CKQueryOperation(cursor: lastCursor)
}
operation.resultsLimit = 15
operation.recordFetchedBlock = recordFetchBlock
operation.queryCompletionBlock = { [weak self] (cursor:CKQueryCursor!, error:NSError!) in
if cursor != nil {
self!.lastCursor = cursor
}
dispatch_async(dispatch_get_main_queue(), {() -> Void in
Misc.hideLoadingInView(view: self!.view)
self!.tableView.reloadData()
self!.refreshControl.endRefreshing()
if error != nil {
Misc.showErrorInView(view: self!.view, message: error.localizedDescription)
}
})
}
CloudKit.sharedInstance.publicDB.addOperation(operation)
Все recordFetchBlock делает для добавления объектов в изменяемый массив, вид таблицы использует в качестве источника данных.
Я новичок в CloudKit, и я озадачен этим дизайном (не возвращая все результаты, но некоторые случайные), или я делаю что-то неправильно?
Hm, interesting, afaik, курсор возвращается только в том случае, если имеется больше результатов, чем предоставленный предел. Я никогда не думал, что это может быть так (не отлаживал курсор), сделал то, что вы предложили, и теперь его выглядит как работа ... очень странно ... Если этому курсору не нужно доверять, как я могу знаете, есть ли больше результатов, чем предел? – peerless
Хм, нет, все еще проблема ... его не курсор – peerless
Ах .. ты прав ... Курсор должен был быть ноль ... Но все равно вы всегда должны устанавливать его в возвращаемое значение в queryCompletionBlock. В противном случае он никогда не вернется в нуль и не будет трогать из предыдущего курсора, если бы было –