gpt4 book ai didi

macos - CKQueryOperation queryCompletionBlock 仅运行 3 次

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

我正在尝试使用 CloudKit 和光标从我的 iCloud 公共(public)数据库下载一批记录。无论 resultsLimit 是如何设置的,代码在前 3 次执行中工作正常,但永远不会执行第 4 次完成 block 。如果未设置 resultsLimit,我会得到 300 条记录,如果它设置为 50,我会得到 150,如果它设置为 5,我会得到 15...

没有报告错误, block 似乎已添加但从未执行。平台是 OS X。这是有问题的代码:

        let queryOp = CKQueryOperation(query: query)
queryOp.recordFetchedBlock = self.fetchedDetailRecord
queryOp.resultsLimit = 5
queryOp.queryCompletionBlock = { [weak self]
(cursor: CKQueryCursor!, error: NSError!) -> Void in
println("comp block called with \(cursor) \(error)")
if error != nil {
println("Error on fetch \(error.userInfo)")
} else {
if cursor != nil {
let nextOp = CKQueryOperation(cursor: cursor)
nextOp.recordFetchedBlock = self!.fetchedDetailRecord
nextOp.queryCompletionBlock = queryOp.queryCompletionBlock
nextOp.resultsLimit = 5
self!.publicDatabase?.addOperation(nextOp)
println("added next fetch")
} else {
self!.fileHandle!.closeFile()
self!.exportProgressIndicator.stopAnimation(self)
}
}
}

self.publicDatabase?.addOperation(queryOp)

这是控制台的结果 -

459013587628.012 0459013587628.621 1459013587628.863 2459013587629.113 3459013587629.339 4用 nil 调用的 comp block 添加了下一个提取459013587828.552 5459013587828.954 6459013587829.198 7459013587829.421 8459013587829.611 9用 nil 调用的 comp block 添加了下一个提取459013587997.084 10459013587997.479 11459013587997.74 12459013587997.98 13459013587998.207 14

大数字只是调用 recordFetchedBlock 之间的时间,第二个数字是调用该 block 的次数。

我很难过...关于如何进行的任何想法?哦,container 和 publicDatabase 是类变量,并在运行上面的代码片段之前进行了初始化。

最佳答案

这可能是另一种方法(已经更新到 Swift 3)。

第三次迭代后并没有停止,而是一直持续到结束

var queryOp = CKQueryOperation(query: query)
queryOp.recordFetchedBlock = self.fetchedARecord
queryOp.resultsLimit = 5
queryOp.queryCompletionBlock = { [weak self] (cursor : CKQueryCursor?, error : Error?) -> Void in
print("comp block called with \(cursor) \(error)")

if cursor != nil {
let nextOp = CKQueryOperation(cursor: cursor!)
nextOp.recordFetchedBlock = self!.fetchedARecord
nextOp.queryCompletionBlock = queryOp.queryCompletionBlock
nextOp.resultsLimit = queryOp.resultsLimit

//this is VERY important
queryOp = nextOp

self!.publicDB.add(queryOp)
print("added next fetch")
}

}

self.publicDB.add(queryOp)

我成功地使用它从 CloudKit 中检索了数百条记录

关于macos - CKQueryOperation queryCompletionBlock 仅运行 3 次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31503184/

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