Alamofire 网络连接丢失

Posted

技术标签:

【中文标题】Alamofire 网络连接丢失【英文标题】:The Network Connection was lost from Alamofire 【发布时间】:2019-01-07 06:19:12 【问题描述】:

我在项目中多次遇到此错误,这让我非常恼火,因为我有完整的互联网连接,尽管我反复收到此错误。

解决办法是什么...?

我正在使用

斯威夫特 - 3.3

Alamofire - 4.7.3

API 调用代码:

class  func post(_ URL: String, withParams params: [String : AnyObject], onView parentView: UIViewController, hnadler completion: @escaping ([AnyHashable: Any]!) -> Void) 
        var URLString  = String()
        URLString = APIConstants.kServerURL + URL
        var headers = [String: String]()
        headers["Content-Type"] = "application/x-www-form-urlencoded"
        
        Alamofire.request(URLString,method: .post, parameters: params , headers : headers)
            .validate(contentType: ["application/vnd.api+json"])
            .responseJSON  response in
                switch response.result 
                case .success( _):
                    var completionVarible = [NSObject : AnyObject]()
                    completionVarible = response.result.value as! [AnyHashable: Any]! as [NSObject : AnyObject]
                    completion(completionVarible)
                case .failure(let error):
                    self.handleFailureResponse(Error: error as NSError?, parentView: parentView)
                
        
    

【问题讨论】:

添加您的代码进行检查 var URLString = String() URLString = APIConstants.kServerURL + URL var headers = [String: String]() headers["Content-Type"] = "application/x-www-form-urlencoded " Alamofire.request(URLString,method: .post, 参数: params , headers : headers) .validate(contentType: ["application/vnd.api+json"]) .responseJSON response in 我按照我们通常实现的方式调用了api 使用此代码编辑您的问题 @ParthPatel 向我们展示在完成 Alamofire 调用时会发生什么,我不相信 Alamofire 会将错误显示为警报... 【参考方案1】:

如果警报立即出现,您可以尝试将缓存策略更改为 .reloadIgnoringCacheData

【讨论】:

我必须在哪里更改政策?【参考方案2】:

我不知道为什么会发生这个错误,但我也遇到过这个错误,所以我提出了一个解决方案。这个错误有一些独特的错误代码。所以检查那个错误代码并忽略那里的警报,或者如果你得到这个错误代码,你可以再次尝试这个 API 调用。

【讨论】:

【参考方案3】:

如果您使用 Alamofire,我会找到解决此问题的方法。

首先在你的公共类中导入 Alamofire,否则你可以创建一个单独的类来检查互联网连接。

导入 Alamofire

class Connectivity 
    class func isConnectedToInternet() ->Bool 
        return NetworkReachabilityManager()!.isReachable
    

在调用 API 之前调用下面的方法

if !Connectivity.isConnectedToInternet() 
            ServiceHandler.ShowAlert(message: "Check your internet connectivity.", title: "Error", parentView: self) //This is my comman method for display alert.
            return
        

【讨论】:

我对这个问题应用了相同的逻辑,但这个没有帮助。你会得到同样的错误。 是的,现在我在调用 API 之前遇到网络错误。

以上是关于Alamofire 网络连接丢失的主要内容,如果未能解决你的问题,请参考以下文章

Domain=NSURLErrorDomain Code=-1005 "swift5 网络连接丢失

如何处理网络中间请求的变化 - Alamofire

Alamofire 4:检测到没有网络连接

为啥没有网络连接时 Alamofire 需要这么长时间才能超时?

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

Alamofire 5 获取错误代码以检查互联网连接