swift - CloudKit - 每次运行相同的查询时,CKQueryOperation 结果都不同

标签 swift cloudkit ckquery

情况是这样的——我正在使用一个简单的 UITableView 来呈现来自 CloudKit publicDB 的记录。当我运行该应用程序时,查询操作返回例如返回 2 个结果(目前只有这些结果)。

我的 TableView 有一个刷新控件,当我拉动刷新时,我得到的结果为零,如果我继续重新加载,最终可能会出现结果,但现在总是。

同样的事情也发生在更多的结果上,我曾经查询过 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 所做的就是将对象添加到 TableView 用作数据源的可变数组。

我是 CloudKit 的新手,我很困惑这是设计使然(不是返回所有结果而是随机返回一些结果)还是我做错了什么?

最佳答案

我看到您正在使用光标。因此,第二次通话将从第一次通话结束的地方开始。您的 resultsLimit 为 15。使用游标时,如果记录超过 15 条,您将仅在第二次执行查询时收到记录。要测试这是否是问题,只需注释掉设置光标的行:operation = CKQueryOperation(cursor: lastCursor)

关于swift - CloudKit - 每次运行相同的查询时,CKQueryOperation 结果都不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31132259/

相关文章:

xcode - AVAudioPath 不工作 - swift

swift - 如何将 self.navigationItem.titleView 快速替换为搜索栏后的标题

ios - 停止不真实的 CloudKit 调用?

ios - 如何获取当前用户创建的所有 CloudKit 记录?

swift - 如何抽象不同的字节缓冲区类型? (NSData, [UInt8], …)

swift - 在 Swift-3 运行时获取所有结构类型的方法?

ios - 遇到 CKSubscription 错误 : "Cannot create or modify field ' notif_num_subtitle_loc_args'"

ios - 为什么 CloudKit 发现在设备上返回零个用户而在模拟器中返回多个用户?

ios - 无法重新加载 TableView

ios - 来自私有(private)区域的 CKQuery 仅返回 CloudKit 中的前 100 个 CKRecords