gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 05:30:27 26 4
gpt4 key购买 nike

Cloudkit private default zone 的查询结果是否有限制?我不知道为什么我只收到带有以下查询的前 100 条记录:

let p = NSPredicate(format: "(type == 'entered') AND (timestamp >= %@) AND (timestamp <= %@)", from, to)
let q = CKQuery(recordType: self.beaconRecordType, predicate: p)
q.sortDescriptors = [NSSortDescriptor(key: "timestamp", ascending: true)]
self.privateDatabase?.performQuery(q, inZoneWithID: nil, completionHandler: { results, error in

//count = 100
println(results.count)

}

好的。正如埃德温在回答中提到的那样,解决方案是使用 CKQueryOperation 来获取初始数据 block ,然后使用 completionBlock 中的“游标”来触发另一个操作。这是一个例子:

更新

func fetchBeacons(from:NSDate, to:NSDate) {

let p = NSPredicate(value: true)
let q = CKQuery(recordType: self.beaconRecordType, predicate: p)

let queryOperation = CKQueryOperation(query: q)

queryOperation.recordFetchedBlock = fetchedARecord

queryOperation.queryCompletionBlock = { [weak self] (cursor : CKQueryCursor!, error : NSError!) in

if cursor != nil {
println("there is more data to fetch")
let newOperation = CKQueryOperation(cursor: cursor)
newOperation.recordFetchedBlock = self!.fetchedARecord
newOperation.queryCompletionBlock = queryOperation.queryCompletionBlock
self!.privateDatabase?.addOperation(newOperation)
}

}

privateDatabase?.addOperation(queryOperation)
}

var i = 0
func fetchedARecord (record: CKRecord!) {
println("\(NSDate().timeIntervalSinceReferenceDate*1000) \(++i)")
}

最佳答案

100 是标准查询的默认限制。这个数额不是固定的。它可能因 iCloud 总负载而异。如果你想影响那个数量,那么你需要使用 CKQueryOperation 并像这样设置 resultsLimit: operation.resultsLimit = CKQueryOperationMaximumResults;CKQueryOperationMaximumResults 是默认值,并将其限制为 100(大部分时间)。不要将该值设置得太高。如果你想要更多的记录,那么使用queryCompletionBlock的游标继续读取更多的记录。

关于ios - 来自私有(private)区域的 CKQuery 仅返回 CloudKit 中的前 100 个 CKRecords,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29592964/

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