ios - CKError : Query filter exceeds the limit of values: 250 for container

标签 ios swift cloudkit ckqueryoperation

我想从公共(public)数据库中提取大约 500 条“访问”记录。 CloudKit 一次只给你 100 条记录,所以我只使用如下所示的 CKQueryCursor 来获取我想要的所有记录。

func fetchVisits(_ cursor: CKQueryCursor? = nil) {
    print("fetchVisits \(cursor)")
    var operation: CKQueryOperation!
    if let cursor = cursor {
        operation = CKQueryOperation(cursor: cursor)
    } else {
        let query = CKQuery(recordType: "Visit", predicate: NSPredicate(format: "Client IN %@ AND ANY Students IN %@", visitClients, visitStudents))
        operation = CKQueryOperation(query: query)
    }
    operation.recordFetchedBlock = {
        (record) in
        totalVisits.append(record)
    }
    operation.queryCompletionBlock = {
        (cursor, error) in
        if let error = error {
            //handle error
        } else if let cursor = cursor {
            self.fetchVisits(cursor)
        } else {
            //all done!
        }
    }
    CKContainer.default().publicCloudDatabase.add(operation)
}

我这样调用这个函数:

fetchVisits()

效果很好,它获得了我需要的所有访问。控制台日志

fetchVisits nil
fetchVisits Optional(<CKQueryCursor: 0x174228140; id=4bb7887c326fc719, zone=(null)>)
fetchVisits Optional(<CKQueryCursor: 0x17422a320; id=f67fb25669486da9, zone=(null)>)
fetchVisits Optional(<CKQueryCursor: 0x174228380; id=7e87eb8b7cfe1a74, zone=(null)>)
fetchVisits Optional(<CKQueryCursor: 0x17422cc80; id=e77e47ef2b29c8a4, zone=(null)>)

但现在的问题是我想在按下按钮时刷新,现在它给了我这个错误:

“服务不可用”(6/2022); “请求失败,HTTP 状态代码为 503”; 30.0 秒后重试

这是不言自明的,我想我通过请求区区 500 条记录让服务器不堪重负?所以我等待 30 秒并再次调用该函数,现在我收到了这个错误。

“超出限制”(27/2023); server message = "Query filter exceeds the limit of values: 250 for container

出于某种原因,我无法再次运行该功能。如果我重新启动应用程序,它会再次正常工作,但只是第一次。此问题似乎特定于返回 CKQueryCursor 的任何表。我正在访问的其他表的记录少于 100 条(因此光标为零),我可以多次拉取这些记录而不会出现任何问题。

最佳答案

好吧,我以前见过这个问题,我相信这是 CloudKit 服务器上的错误。根据我的经验,它与复杂的查询有关。

如果您尝试将谓词更改为:

NSPredicate(value: true)

或者甚至通过删除 ANY 部分来简化现有的,这可能足以修复它。

关于ios - CKError : Query filter exceeds the limit of values: 250 for container,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45346613/

相关文章:

ios - 合并两个持久存储 icloud 存储和非 icloud 存储

ios - SearchController改变tableView的大小

iOS 8 Google Maps SDK myLocation 图标气泡图形故障

ios - 如何从特定记录区域获取记录

swift - Xcode 成功构建但无法运行 macOS 应用程序

ios - Firebase 与 CloudKit 目标商店选项

ios - 如何让iOS应用防篡改?

ios - 自动布局。使用动态高度垂直设置两个 View

ios - Tableview 背景显示在模拟器上,但在设备上播放时为白色

ios - 管理一堆具有依赖关系的 NSOperation