1

通常,在 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 时获得准确的错误状态。

4

1 回答 1

2

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

  • 在以下情况下确定网络无法正常工作:
    • 一个或多个 URL 请求失败并且
    • 操作系统尝试探测一个众所周知的强制门户检测 URL,并
    • 该请求也失败了
  • 没有接口有 IP 地址
    • 包括任何连接的 VPN
    • 不包括环回接口

在系统达到该状态之前,您看到的故障将是“无法连接到主机”,因为这是操作系统确定的所有内容。

通常,您的应用程序应该以相同的方式解释这些 - 通过使用可达性来确定何时重试,然后在可达性发生变化时再次尝试。

于 2016-05-18T21:48:15.820 回答