簡體   English   中英

CloudKit-每次運行相同查詢時CKQueryOperation結果不同

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM