繁体   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