错误域= NSURLErrorDomain代码= -1004而不是Swift服务调用中的-1009

时间:2016-05-13 11:28:45

标签: ios http nsurlsession url-parsing nsurlerrordomain

通常,在iOS中使用dataTaskWithRequest或sendAsynchronousRequest执行GET或POST调用时,我们会使用错误代码来处理与网络相关的错误,例如,

  • NSURLErrorNotConnectedToInternet = -1009
  • NSURLErrorCannotConnectToHost = -1004
  • NSURLErrorTimedOut = -1001

在我的情况下,我正断开互联网并执行服务电话。因此,预期的错误代码是“NSURLErrorNotConnectedToInternet = -1009”。但是,它如下所示抛出“NSURLErrorCannotConnectToHost = -1004”

Error Domain=NSURLErrorDomain Code=-1004 "Could not connect to the 
server." UserInfo=0x1700f0e00 {NSUnderlyingError=0x170255e70 "The 
operation couldn’t be completed. (kCFErrorDomainCFNetwork error 
-1004.)", NSErrorFailingURLStringKey=https://example.com/reg,   
NSErrorFailingURLKey=https://example.com/reg, _kCFStreamErrorDomainKey=1, 
_kCFStreamErrorCodeKey=51, NSLocalizedDescription=Could not connect to the server.}

那么,如何在使用dataTaskWithRequest或sendAsynchronousRequest时获得确切的错误状态。

1 个答案:

答案 0 :(得分:1)

作为一项规则,IIRC,操作系统仅在两种情况下发送“未连接到Internet”:

  • 在以下情况之后,网络被确定为无效:
    • 一个或多个网址请求失败,
    • 操作系统尝试探测众所周知的强制网络门户检测网址
    • 该请求也失败
  • 没有接口有IP地址
    • 包括任何已连接的VPN
    • 排除环回接口

直到系统达到该状态,您看到的失败将是“无法连接到主机”,因为这是所有操作系统都知道的。

通常,您的应用应以相同的方式解释这些问题 - 使用可访问性来确定何时重试,然后在可达性更改时再次尝试。