gpt4 book ai didi

swift - 如果结果限制小于 1000,为什么我的 CKQueryOperation 只会返回 Cursor?

转载 作者:行者123 更新时间:2023-11-30 10:47:36 25 4
gpt4 key购买 nike

CloudKit 有大约 2000 条记录我正在尝试下载。我无法全部下载,我查看了 CloudKit CKQueryOperation doesn't get all records获得超过 100 个结果。现在我最多可以下载 999 个,但如果我将结果限制设置为 1000 或更多,它将在 80-500 之间随机失败。我需要将这些条目拆分为不同的记录类型吗?

private func checkForCloudData() {
let query = CKQuery(recordType: "myRecordType", predicate: .init(value: true))
let op = CKQueryOperation(query: query)

op.qualityOfService = .userInitiated
op.queuePriority = .veryHigh
op.resultsLimit = 999

op.recordFetchedBlock = { record in
// fetched record
}

op.queryCompletionBlock = { cursor, err in

if cursor != nil {
print(cursor!)

self.performOperation(withOperation: CKQueryOperation(cursor: cursor!))
}

if err == nil {
// handle complete download
} else {
if (err as! CKError).code == .limitExceeded {
if cursor != nil {
self.performOperation(withOperation: CKQueryOperation(cursor: cursor!))
return
}
let newOperation = CKQueryOperation(query: query)
newOperation.resultsLimit = op.resultsLimit
newOperation.queuePriority = .veryHigh
newOperation.qualityOfService = .userInitiated
newOperation.recordFetchedBlock = op.recordFetchedBlock
newOperation.queryCompletionBlock = op.queryCompletionBlock

self.performOperation(withOperation: newOperation)
}
}

}

self.performOperation(withOperation: op)
}

private func performOperation(withOperation operation: CKQueryOperation) {
publicDB.add(operation)
}

最佳答案

我认为400是单次操作的限制,因此您需要使用游标来获取更多记录,并在返回游标不为nil时继续这样做。

看看它是如何在 RxCloudKit 库的 RecordFetcher 中完成的 - https://github.com/maxvol/RxCloudKit/blob/master/RxCloudKit/RecordFetcher.swift

关于swift - 如果结果限制小于 1000,为什么我的 CKQueryOperation 只会返回 Cursor?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55435171/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com