尝试按如下方式调用Web服务,并且遇到随机问题"网络连接丢失"导致应用程序在设备和模拟器上崩溃的错误。
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
答案 0 :(得分: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
}
}
以上代码可以很好地完成工作。 请注意,我编辑了您的代码并添加了“validate”方法,没有这些方法,某些结果数据不会更新,例如“isFailure”属性始终为false。 我希望这可以帮助您解决问题。
答案 1 :(得分:1)
今天,我遇到了同样的错误。我记得苹果添加到iOS 9 NSAppTransportSecurity
的属性。您可以尝试仅为测试禁用,添加以下内容:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
更好地执行此配置
答案 2 :(得分:0)
我遇到了这个问题,花了1个多星期来解决。 和 我只是通过更改 Wifi 连接来解决此问题。