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

Ios CKQueryOperation可见性、取消和超时可能性,ios,swift,icloud,cloudkit,Ios,Swift,Icloud,Cloudkit,我的应用程序需要使用CKDatabase运行CKQueryOperation。这需要网络访问,但并不总是可用 一旦我将CKQueryOperation添加到CKDatabase,我的控件就会停止 我有没有办法: 请参阅特定于数据库的所有挂起操作的列表 将操作添加到数据库后是否取消 设置完成超时,以便在网络阻止完成时操作不会保持挂起状态 我知道我可以用CKDatabase performQuery实现这一点,但是如果可能的话,我更愿意使用操作,提前感谢您的帮助 对于超时,您可以在CKQueryOp

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

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

我有没有办法:

  • 请参阅特定于数据库的所有挂起操作的列表
  • 将操作添加到数据库后是否取消
  • 设置完成超时,以便在网络阻止完成时操作不会保持挂起状态

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

    对于超时,您可以在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秒。

    关于第2点:我没有尝试,但我认为这是可能的,正如苹果在文档中所说:“您指定的任何完成块都应该准备好处理操作失败以完成其任务,无论是由于错误还是明确取消。”和b)CKQueryOperation继承自NSOperation。因此,您可能会(或已经)尝试[操作取消]。