取消请求的错误处理

时间:2016-03-23 16:00:10

标签: ios swift exception-handling alamofire nserror

我使用Alamofire发送下载请求。我正在处理SuccessFailure个案件,如下所示。

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

一切都很好。

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

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

  1. 检查由于请求取消而创建错误的条件
  2. 检查viewController是否还活着
  3. 此外,我可以在Bool中设置viewWillDisappear变量,这是一个简单的解决方案
  4. 如何处理这种情况?

    另外如何检查第1点和第1点2?

4 个答案:

答案 0 :(得分:6)

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

Swift 4

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

答案 1 :(得分:1)

如果你能够了解它失败的原因,你应该这样做,所以:UIViewController

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

答案 2 :(得分:1)

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

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

您可以检查请求已取消错误以查找请求是否已取消

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

这个答案来自@ peres的答案。

答案 3 :(得分:0)

现在应该:

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