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

Posted

技术标签:

【中文标题】Swift 服务调用中的错误域 = NSURLErrorDomain 代码 = -1004 而不是 -1009【英文标题】:Error Domain=NSURLErrorDomain Code=-1004 instead of -1009 in Swift service calls 【发布时间】:2016-05-13 11:28:45 【问题描述】:

一般来说,在 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】:

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

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

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

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

【讨论】:

以上是关于Swift 服务调用中的错误域 = NSURLErrorDomain 代码 = -1004 而不是 -1009的主要内容,如果未能解决你的问题,请参考以下文章

iOS swift 中的错误域 = NSCocoaErrorDomain 代码 = 3840?

JSP中JSON Web服务中的跨域错误?

无法从 Alamofire 的 Swift 3 中的 Web 服务的 PATCH API 调用中获得响应

为啥我在 iOS 上从 Swift 调用服务时收到 SSL 错误?

Swift 2中的“调用中的额外参数'错误'”错误[重复]

swift2:调用中的额外参数“错误”