随机获取“网络连接丢失。”迅速使用“Alamofire.request”

Posted

技术标签:

【中文标题】随机获取“网络连接丢失。”迅速使用“Alamofire.request”【英文标题】:randomly fetch "The network connection was lost." in swift using "Alamofire.request" 【发布时间】:2017-04-18 07:15:35 【问题描述】:

尝试如下调用网络服务,并遇到随机的“网络连接丢失”错误,导致设备和模拟器上的应用程序崩溃。

 Alamofire.request(url, method: .post, parameters: ["limit" : "3" , "offset" : self.storeArray?.count ?? 0], encoding: URLEncoding.default, headers: nil).responseJSON  (response:DataResponse<Any>) in

                switch(response.result) 
                case .success(_):

下面是我的错误

Optional(Error Domain=NSURLErrorDomain Code=-1005 "The network connection was lost." UserInfo=NSUnderlyingError=0x608000a5f950 Error Domain=kCFErrorDomainCFNetwork Code=-1005 "(null)" UserInfo=NSErrorPeerAddressKey=<CFData 0x60800029fea0 [0x1136c0df0]>length = 16, capacity = 16, bytes = 0x10020050a63e1c720000000000000000, _kCFStreamErrorCodeKey=-4, _kCFStreamErrorDomainKey=4, NSErrorFailingURLStringKey=http://lokomart.com/services/getSearchResultData, NSErrorFailingURLKey=http://lokomart.com/services/getSearchResultData, _kCFStreamErrorDomainKey=4, _kCFStreamErrorCodeKey=-4, NSLocalizedDescription=The network connection was lost.)

// 我使用 php 后端和 godaddy 豪华主机。

还可以使用 swift 3

【问题讨论】:

您是仅在设备上还是在模拟器上看到问题? 是的,使用设备和模拟器获取问题。 你得到分辨率了吗?在设备和模拟器上,我的代码也非常随机 问题未解决。如果您有任何想法,请建议我。 【参考方案1】:

我遇到了这个问题并花了超过 1 周的时间来解决这个问题。 和 我刚刚通过更改 Wifi 连接解决了这个问题。

【讨论】:

很酷的解决方案:) 天哪!那行得通!谢谢。花了很多时间调试 swift 代码,认为这是我的错。 @bauhaus9 听起来不错。 更新:我有两个 wifi 网络。我无法连接到目标主机的原因是我有一个网络规则阻止了与该目标主机的任何连接。在它确实工作的 wifi 网络上,我有一个干净、畅通的连接。一旦我在行为不端的网络上修复了规则,两个网络都允许访问。所以,我的代码很好,是网络!【参考方案2】:

这个问题没有直接的解决方案,我尝试将 php 后端处理超时增加到 60 秒也尝试将 Apache 服务器超时从 300 更改为 600,它只会降低频率,我认为不是最好的解决方案是捕获故障然后要么重新创建请求并发送它,要么停止做其他事情。

Alamofire.request(url, method: .post, parameters: ["limit" : "3" , "offset" : self.storeArray?.count ?? 0], encoding: URLEncoding.default, headers: nil).validate().responseJSON  (response:DataResponse<Any>) in

    switch(response.result) 
        case .success(_):
         break;
        case .failure(_ let error): 
         //redo all the work or stop 
         break;
          

或者我正在做的事情如下

if(response.result.isFailure) 
     print("Error occured")
     if(self.retryCounter! < 2)                     
         self.retryCounter! += 1
         //recreating post request and sending again
          return
     
     else 
         return
     

上面的代码很好地完成了这项工作。 请注意,我编辑了您的代码并添加了“验证”方法,否则某些结果数据不会更新,例如“isFailure”属性始终为假。 我希望这可以帮助您解决问题。

【讨论】:

@user3091160 这是一个无法帮助的错误【参考方案3】:

今天,我遇到了同样的错误。我记得为苹果添加到 ios 9 NSAppTransportSecurity 的属性。您可以尝试禁用仅用于测试,添加以下内容:

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>

您可以按照这个答案更好地进行此配置https://***.com/a/31623388/2711766

【讨论】:

您的应用程序将无法使用该代码进入 AppStore 以上解决方案不适用于报告的随机问题。

以上是关于随机获取“网络连接丢失。”迅速使用“Alamofire.request”的主要内容,如果未能解决你的问题,请参考以下文章

Safari ajax 请求加载资源失败:网络连接丢失

当应用程序处于后台并且网络连接丢失时,位置更新计时器不起作用?

网络连接丢失。NSURLErrorDomain Code=-1005

使用 NSURLSessionUploadTask 上传视频。错误“网络连接丢失。”

Alamofire 网络连接丢失

错误代码=-1005 “网络连接丢失。”在 Swift 中使用 Web Service