[英]CloudKit - CKQueryOperation results different each time the same query is ran
就是這種情況-我正在使用一個簡單的UITableView來呈現CloudKit publicDB中的記錄。 當我運行應用程序時,查詢操作返回例如返回2個結果(這是當前的全部結果)。
我的表視圖具有刷新控件,當我進行刷新操作時,我得到的結果為零,如果我繼續進行重新加載,最終可能會出現結果,但現在總是如此。
同樣的事情也會產生更多的結果,我曾經查詢過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的新手,我很困惑,這是設計使然(不返回所有結果,而是返回一些隨機結果)還是我做錯了什么?
我看到您正在使用游標。 因此,第二個通話將在第一個通話結束的地方開始。 您的resultLimit為15。使用游標時,如果有超過15條記錄,則您只會在第二次執行查詢時收到記錄。 要測試這是否是問題,只需注釋掉設置光標的行:operation = CKQueryOperation(cursor:lastCursor)
我發現了問題,我正在嘗試(在NSPredicate中)以某處讀取的值為單位的半徑為千米。 因此,我試圖查詢500米而不是500公里內的記錄,並且我在模擬器中使用的GPX文件包含多個具有較大距離的記錄。 由於它模擬運動,因此沒有得到一致的結果。
現在,當我為半徑使用適當的值時,一切似乎都很好!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.