CKQueryOperation 可见性、取消和超时可能性

Posted

技术标签:

【中文标题】CKQueryOperation 可见性、取消和超时可能性【英文标题】:CKQueryOperation visibility, cancellation and timeout possibilities 【发布时间】:2015-09-24 20:55:03 【问题描述】:

我的应用程序需要使用 CKDatabase 运行 CKQueryOperation。这需要网络访问,但并不总是可用。

一旦我将 CKQueryOperation 添加到 CKDatabase 中,我的控制就会停止。

有没有办法:

    查看特定于 CKDatabase 的所有待处理操作。 将操作添加到 CKDatabase 后取消操作? 设置完成超时,以便在网络阻止完成时操作不会保持挂起?

我知道我可以使用 CKDatabase performQuery 来做到这一点,但是如果可能的话,我更愿意使用操作,提前感谢您的帮助!

【问题讨论】:

关于数字 2:我没有尝试过,但我认为这是可能的,因为 a) Apple 在文档中说:“您指定的任何完成块都应该准备好处理操作失败完成其任务,无论是由于错误还是明确取消。” b) 因为 CKQueryOperation 继承自 NSOperation。所以你可能会(或已经做过?)尝试[操作取消]。 【参考方案1】:

对于超时,您可以在 CKQueryOperation 上设置配置对象:

let config = CKOperation.Configuration()
config.timeoutIntervalForRequest = 5
config.timeoutIntervalForResource = 5

// Config operation
let operation = CKQueryOperation(query: query)
operation.configuration = config
operation.other_stuff..
operation.queryCompletionBlock =  (_, error: Error?) in
        guard error == nil else 
            // Handle timeout error here.
            return
        
        ...
 

默认超时为 60 秒。

【讨论】:

以上是关于CKQueryOperation 可见性、取消和超时可能性的主要内容,如果未能解决你的问题,请参考以下文章

使用PyQt中的QCheckBox或QComboBox更改小部件可见性

MFC - 选中/取消选中菜单项

使用新游标多次执行 CKQueryOperation

使用 CKQueryOperation 和 CKReference 获取大集合

CKQueryOperation 处理大批量

CloudKit:删除记录的 CKQueryOperation