通常,在使用dataTaskWithRequest或sendAsynchronousRequest在iOS中执行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时获取确切的错误状态。

    最佳答案

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

  • 在以下情况下,确定网络无法运行:
  • 一个或多个URL请求失败,并且
  • 操作系统尝试探查知名的强制门户检测URL和
  • 该请求也失败
  • 没有接口具有IP地址
  • 包括所有已连接的VPN
  • 不包括环回接口

  • 在系统达到该状态之前,您看到的故障将是“无法连接到主机”,因为这是操作系统确定的全部信息。

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

    关于ios - Swift服务调用中的Error Domain = NSURLErrorDomain Code = -1004而不是-1009,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37208917/

    10-10 13:14