Mob*_*Mon 6 objective-c ios afnetworking swift
使用Swift和NSURLSession.当我没有互联网连接(手动关闭wifi /小区网络)时,我得到的NSError localizedDescription非常通用.它说:" 操作无法完成. "
var task = session.dataTaskWithRequest(request, completionHandler: {data, response, error -> Void in
Run Code Online (Sandbox Code Playgroud)
我正在寻找一个更具体的消息发送给用户.我启用了断点并检查了所有对象,但找不到任何好的东西.
在swift之前我使用AFNetworking和目标C:
failure:^(AFHTTPRequestOperation *operation, NSError *error) {
Run Code Online (Sandbox Code Playgroud)
我在这里得到的错误消息非常具有描述性,例如" 互联网连接似乎处于脱机状态 "
Rob*_*Rob 22
看code和domain所产生的NSError对象.您可以诊断为什么它没有看到那些.
例如,域名NSURLErrorDomain和代码-1009意味着您未连接到互联网.所以在Swift 3中:
if let error = error as? NSError, error.domain == NSURLErrorDomain && error.code == NSURLErrorNotConnectedToInternet {
print("not connected")
}
Run Code Online (Sandbox Code Playgroud)
您可以在全局变量 - 基础常量参考中查看这些代码的列表.只需在"NSURL Domain"下进行探索.
此外,NSURLErrorNotConnectedToInternet通过按command+ shift+ 搜索o,然后,您将被带到相关的标题(NSURLError.h).就个人而言,我倾向于比文档更多地信任标题.如果在使用Objective-C时进行此搜索,您甚至可以看到CFURLError代码的交叉引用(您可以command单击或command+ shift+ o并搜索kCFURLErrorNotConnectedToInternet),如果您浏览它们,您实际上会看到数字与这些常量相关的值.
雨燕4
if let error = error as NSError?, error.domain == NSURLErrorDomain && error.code == NSURLErrorNotConnectedToInternet {
//not connected
}
Run Code Online (Sandbox Code Playgroud)
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)
}
})
Run Code Online (Sandbox Code Playgroud)
此实现向用户显示出现问题的警报。您可以根据需要处理错误(例如,通过重试请求而不用警报打扰用户)。
UIAlertController仅限 iOS 8。如果您想支持 iOS 7,请显示UIAlertView.
| 归档时间: |
|
| 查看次数: |
13754 次 |
| 最近记录: |