取消请求的错误处理
Error handling for cancelled request
我使用Alamofire
发送下载请求。我正在处理 Success
和 Failure
个案例,如下所示。
Alamofire.request {
case Success:
// Update UI
case Failure:
// Show Alert message (error!.localizedDescription)
}
一切都很好。
当我返回时,在 viewWillDisappear
,我取消了任何正在进行的请求。问题是,取消请求会抛出错误消息,当我不在该屏幕上时会触发警报。
据我所知,我可以执行两个操作。
- 如果由于请求取消而产生错误,请检查条件
- 检查
viewController
是否存活
- 我也可以在
viewWillDisappear
中设置一个Bool
变量,这是一个简单的解决方案
如何处理这种情况?
还有如何检查点 1 和 2?
如果你能找到它失败的原因,你应该继续这样做,所以:Check the condition if the error is created due to request cancel
。
选项 2 很脆弱,因为您依赖于 UIViewController
的生命周期。选项 3 只会通过一个新标志使您的逻辑更加繁琐。保持简单
注意:使用 aumanets
答案进行故障安全检查
对于想知道如何使用选项 1 的人
您可以检查请求取消错误以了解请求是否被取消
let errorDict = (error as NSError).userInfo;
if let errorString = errorDict["NSLocalizedDescription"] as? String, errorString == "cancelled" {
// Request is cancelled.
}
本回答来源于@peres的回答。
这是一种更通用的方法,适用于任何设备语言:
Swift 4
if (response.error as NSError?)?.code == NSURLErrorCancelled {
// Do Your stuff
}
现在应该是:
var isCancelError: Bool {
guard let afError = self as? AFError else { return false }
return afError.isExplicitlyCancelledError
}
您可以通过这种通用方法实现它
if let errorCode = (error.underlyingError as NSError?)?.code, errorCode == NSURLErrorCancelled { // for cancelled
我使用Alamofire
发送下载请求。我正在处理 Success
和 Failure
个案例,如下所示。
Alamofire.request {
case Success:
// Update UI
case Failure:
// Show Alert message (error!.localizedDescription)
}
一切都很好。
当我返回时,在 viewWillDisappear
,我取消了任何正在进行的请求。问题是,取消请求会抛出错误消息,当我不在该屏幕上时会触发警报。
据我所知,我可以执行两个操作。
- 如果由于请求取消而产生错误,请检查条件
- 检查
viewController
是否存活 - 我也可以在
viewWillDisappear
中设置一个Bool
变量,这是一个简单的解决方案
如何处理这种情况?
还有如何检查点 1 和 2?
如果你能找到它失败的原因,你应该继续这样做,所以:Check the condition if the error is created due to request cancel
。
选项 2 很脆弱,因为您依赖于 UIViewController
的生命周期。选项 3 只会通过一个新标志使您的逻辑更加繁琐。保持简单
注意:使用 aumanets
答案进行故障安全检查
对于想知道如何使用选项 1 的人
您可以检查请求取消错误以了解请求是否被取消
let errorDict = (error as NSError).userInfo;
if let errorString = errorDict["NSLocalizedDescription"] as? String, errorString == "cancelled" {
// Request is cancelled.
}
本回答来源于@peres的回答。
这是一种更通用的方法,适用于任何设备语言:
Swift 4
if (response.error as NSError?)?.code == NSURLErrorCancelled {
// Do Your stuff
}
现在应该是:
var isCancelError: Bool {
guard let afError = self as? AFError else { return false }
return afError.isExplicitlyCancelledError
}
您可以通过这种通用方法实现它
if let errorCode = (error.underlyingError as NSError?)?.code, errorCode == NSURLErrorCancelled { // for cancelled