为什么有时我会收到“连接丢失”错误?

时间:2018-06-24 01:56:05

标签: ios swift alamofire

因此,我正在制作一个应用,并希望使用alamofire从我自己的服务器中获取数据。但我不知道为什么,我有时会收到错误

  

HTTP加载失败(错误代码:-1005 [1:57])。   错误结束-   代码:-1005。错误:网络连接丢失。

,仅当我尝试将数据获取到自己的服务器时才会发生这种情况。我尝试进行比较以从Darksky API从其他服务器获取数据,但从未收到错误。这是我用来从自己的服务器获取数据和Darksky API的代码。

通常在.....

时发生错误

启动应用程序后,按下主屏幕按钮(这样应用程序进入后台状态),当我回到应用程序时,此时通常会出现错误。

所以也许在触发prepareDataBeforeEnterForeground时出现错误。并非总是发生,而且我不知道为什么它仅发生在我的服务器上,我需要知道如何解决此问题。

错误是来自我的代码还是来自服务器?

import UIKit
import Alamofire

    class ViewController: UIViewController {


        override func viewDidLoad() {
            super.viewDidLoad()

            getData()

            getPrepareDataBeforeEnterForeground() // using notification center

        }

        override func viewWillAppear(_ animated: Bool) {
            super.viewWillAppear(animated)

            getData()
        }


        func getData() {

        // to make request to my own server OR to DarkSky API


            let url = URL(string: "https://")
            let parameters : [String:String] = ["xxx": "xxxx"]


            Alamofire.request(url!, method: .get, parameters: parameters).responseJSON { (response) in

                switch response.result {
                case .failure(let error):
                    print("Error: \(error.localizedDescription)")
                case .success(let value) :
                    // parse the data
                }
            }
        }



        func getPrepareDataBeforeEnterForeground() {

            // to trigger some function after the enter the background state
            NotificationCenter.default.addObserver(self, selector: #selector(ViewController.prepareDataBeforeEnterForeground), name: NSNotification.Name.UIApplicationWillEnterForeground, object: nil)
        }

        @objc func prepareDataBeforeEnterForeground() {
           getData()
        }


    }

1 个答案:

答案 0 :(得分:1)

作为参考,您的错误代码与以下内容有关:

kCFURLErrorNetworkConnectionLost  = -1005

根据我个人的经验,当我尝试发送到服务器的参数不正确或格式错误时,会出现此错误。

就您而言,我似乎看不到您在哪里接受parameters或对其进行定义,所以这可能是您的问题。

如果来自服务器,则必须检查服务器软件(Apache,nginx等)的错误日志(如果有)。


以下是有效请求的示例:

let parameters: Parameters = [
    "foo": "bar",
    "baz": ["a", 1],
    "qux": [
        "x": 1,
        "y": 2,
        "z": 3
    ]
]
Alamofire.request("https://httpbin.org/post", method: .post, parameters: parameters)

要添加,似乎也没有发送任何标头,因此可能导致服务器完全拒绝该请求。