【问题标题】:Error handling for cancelled request取消请求的错误处理
【发布时间】:2016-07-11 00:42:13
【问题描述】:

我使用Alamofire 发送下载请求。我正在处理SuccessFailure 的情况,如下所示。

Alamofire.request {
     case Success:
          // Update UI
     case Failure:
          // Show Alert message (error!.localizedDescription)
}

一切都很好。

当我返回 viewWillDisappear 时,我会取消任何正在进行的请求。问题是,取消请求会引发错误消息,并且当我不在该屏幕上时会触发警报。

据我所知,我可以采取两种行动。

  1. 检查条件是否因请求取消而产生错误
  2. 检查viewController 是否存在
  3. 我还可以在viewWillDisappear 中设置一个Bool 变量,这是一个简单的解决方案

如何处理这种情况?

还有如何检查点 1 和 2?

【问题讨论】:

  • 真正的问题是什么?用户看不到警报,或者应用程序在尝试显示警报时崩溃?
  • 基本上我不想在请求被取消时显示警报。
  • 如果视图消失了如何显示警报?

标签: ios swift exception-handling alamofire nserror


【解决方案1】:

您可以通过这种通用方法实现它

if let errorCode = (error.underlyingError as NSError?)?.code, errorCode == NSURLErrorCancelled { // for cancelled 

【讨论】:

    【解决方案2】:

    现在应该是:

    var isCancelError: Bool {
        guard let afError = self as? AFError else { return false }
        return afError.isExplicitlyCancelledError
    }
    

    【讨论】:

      【解决方案3】:

      这是一种更通用的方法,适用于任何设备语言:

      斯威夫特 4

      if (response.error as NSError?)?.code == NSURLErrorCancelled {
         // Do Your stuff
      }
      

      【讨论】:

        【解决方案4】:

        注意:使用aumanets 答案进行故障安全检查

        对于想知道如何使用选项 1 的人

        您可以检查请求取消错误以查看请求是否被取消

        let errorDict = (error as NSError).userInfo;
        if let errorString = errorDict["NSLocalizedDescription"] as? String, errorString == "cancelled" {
            // Request is cancelled.
        }
        

        此答案源自@peres 的答案。

        【讨论】:

        • 如果设备的语言与英语不同,这将不起作用
        【解决方案5】:

        如果你能找到失败的原因,你应该继续这样做,所以:Check the condition if the error is created due to request cancel

        选项 2 很脆弱,因为您依赖于 UIViewController 的生命周期。选项 3 只会通过一个新标志使您的逻辑更加繁琐。保持简单

        【讨论】:

        • 如何检查错误是否是由于请求取消引起的?
        • @iOS Error Domain=NSURLErrorDomain Code=-999 "cancelled"
        • 非常感谢!拯救了我的一天!
        猜你喜欢
        • 2017-07-26
        • 1970-01-01
        • 2016-05-29
        • 2013-10-02
        • 1970-01-01
        • 2019-07-23
        • 1970-01-01
        相关资源
        最近更新 更多