NSURLSession错误处理
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NSURLSession错误处理相关的知识,希望对你有一定的参考价值。
使用Swift和NSURLSession。当我没有互联网连接(手动关闭wifi /小区网络)时,我得到的NSError localizedDescription非常通用。它说“操作无法完成”。
var task = session.dataTaskWithRequest(request, completionHandler: {data, response, error -> Void in
我正在寻找一个更具体的消息发送给用户。我启用了断点并检查了所有对象,但找不到任何好的东西。
在swift之前我使用AFNetworking和目标C:
failure:^(AFHTTPRequestOperation *operation, NSError *error) {
我在这里得到的错误消息非常具有描述性,例如“互联网连接似乎处于脱机状态”
看看由此产生的code
物体的domain
和NSError
。您可以诊断为什么它没有看到那些。
例如,NSURLErrorDomain
的域名和-1009
的代码意味着您没有连接到互联网。所以在Swift 3中:
if let error = error as? NSError, error.domain == NSURLErrorDomain && error.code == NSURLErrorNotConnectedToInternet {
print("not connected")
}
您可以在Global Variables - Foundation Constants Reference中看到这些代码的列表。只需在“NSURL Domain”下进行探索。
此外,按命令+ shift + o搜索NSURLErrorNotConnectedToInternet
然后,您将被带到相关的标题(NSURLError.h
)。就个人而言,我倾向于比文档更多地信任标题。如果你在使用Objective-C时进行搜索,你甚至可以看到对CFURLError
代码的交叉引用(你可以命令点击或命令+ shift + o并搜索kCFURLErrorNotConnectedToInternet
),如果你探索那些,你实际上会看到与这些常量相关的数值。
斯威夫特4
if let error = error as NSError?, error.domain == NSURLErrorDomain && error.code == NSURLErrorNotConnectedToInternet {
//not connected
}
var task = session.dataTaskWithRequest(request, completionHandler: {data, response, error -> Void in
if error == nil {
//all ok do what you want to do
} else {
let alertController = UIAlertController(title: "Error", message: "Put your error message here", preferredStyle: .Alert)
let cancelAction = UIAlertAction(title: "OK", style: .Cancel) { (action) in
}
alertController.addAction(cancelAction)
self.presentViewController(alertController, animated: true)
}
})
此实现向用户显示出现错误的警报。您可以根据需要处理错误(例如,通过重试请求而不会通过警报来骚扰用户)。 UIAlertController
仅限ios 8。如果你想支持iOS 7显示一个UIAlertView
。
你的意思是operation.responseString
来自后端的特定错误响应吗?我昨天才找到它,在AFHTTPSessionManager
请求的失败块中检查出来
NSError *underError = error.userInfo[@"NSUnderlyingError"];
NSData *responseData = underError.userInfo[@"com.alamofire.serialization.response.error.data"];
这是the question I asked at AFN/Github。希望它会有所帮助。
以上是关于NSURLSession错误处理的主要内容,如果未能解决你的问题,请参考以下文章
管理错误时,带有 JSON 数据参数的 NSURLSession 崩溃为零
NSURLSession 错误域 = NSPOSIXErrorDomain 代码 = 2 “没有这样的文件或目录”
NSUrlSession 代理请求失败,错误代码为 310 (kCFErrorHTTPSProxyConnectionFailure)