NSURLSession错误处理

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

codedomain所产生的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),如果您浏览它们,您实际上会看到数字与这些常量相关的值.


Saz*_*han 6

雨燕4

if let error = error as NSError?, error.domain == NSURLErrorDomain && error.code == NSURLErrorNotConnectedToInternet {
      //not connected
}
Run Code Online (Sandbox Code Playgroud)


Nik*_* M. 0

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.