【问题标题】:Error Domain=NSURLErrorDomain Code=-1005 "The network connection was lost错误域=NSURLErrorDomain 代码=-1005 “网络连接丢失
【发布时间】:2017-05-07 13:24:30
【问题描述】:

我在使用 SwiftyBeaver 记录器时遇到此错误,它尝试通过此代码将数据发送到云:

func sendToServerAsync(str: String?, complete: (ok: Bool, status: Int) -> ()) {

        if let payload = str, let queue = self.queue {

            // create operation queue which uses current serial queue of destination
            let operationQueue = NSOperationQueue()
            operationQueue.underlyingQueue = queue

            let session = NSURLSession(configuration:
                NSURLSessionConfiguration.defaultSessionConfiguration(),
                delegate: nil, delegateQueue: operationQueue)

            // assemble request
            let request = NSMutableURLRequest(URL: serverURL)
            request.HTTPMethod = "POST"
            request.addValue("application/json", forHTTPHeaderField: "Content-Type")
            request.addValue("application/json", forHTTPHeaderField: "Accept")

            // basic auth header
            let credentials = "\(appID):\(appSecret)".dataUsingEncoding(NSUTF8StringEncoding)!
            let base64Credentials = credentials.base64EncodedStringWithOptions([])
            request.setValue("Basic \(base64Credentials)", forHTTPHeaderField: "Authorization")

            // POST parameters
            let params = ["payload": payload]
            do {
                request.HTTPBody = try NSJSONSerialization.dataWithJSONObject(params, options: [])
            } catch let error as NSError {
                toNSLog("Error! Could not create JSON for server payload. \(error)")
            }
            //toNSLog("sending params: \(params)")
            //toNSLog("\n\nbefore sendToServer on thread '\(threadName())'")

            sendingInProgress = true
            // send request async to server on destination queue
            let task = session.dataTaskWithRequest(request) {
                _, response, error in
                var ok = false
                var status = 0
                //toNSLog("callback of sendToServer on thread '\(self.threadName())'")

                if let error = error {
                    // an error did occur
                    self.toNSLog("Error! Could not send entries to server. \(error)")
                } else {
                    if let response = response as? NSHTTPURLResponse {
                        status = response.statusCode
                        if status == 200 {
                            // all went well, entries were uploaded to server
                            ok = true
                        } else {
                            // status code was not 200
                            var msg = "Error! Sending entries to server failed "
                            msg += "with status code \(status)"
                            self.toNSLog(msg)
                        }
                    }
                }
                return complete(ok: ok, status: status)
            }
            task.resume()
        }
    }

奇怪的是它适用于前两个或三个日志条目,然后由于上述错误而停止。我试图重置模拟器上的内容和设置并重新启动我的模拟器(如Error Domain=NSURLErrorDomain Code=-1005 "The network connection was lost." 中所建议的那样),但这只是暂时修复它——在前 2-3 个日志条目之后,它再次开始失败。

昨晚我尝试与 SwiftBeaver 的创建者一起调试了几个小时,但我们无法让它工作。似乎没有多少人看到这个问题。

我尝试删除我的 Wifi 连接并重新连接,但这也没有用。

我们将不胜感激任何有关这方面的指导。

仅供参考,我使用的是 Swift 2 和 XCode 7.3。

【问题讨论】:

    标签: ios swift swift2 nsurlsession swiftybeaver


    【解决方案1】:

    这可能是由于 iOS 模拟器中的 HTTP 保持活动支持存在严重错误造成的。见:

    Error Domain=NSURLErrorDomain Code=-1005 "The network connection was lost."

    有关更多详细信息,但简短的回答是在您进行模拟器测试时使用的服务器上禁用 keep-alive,或者更好的是,添加一些逻辑,以便在看到特定错误时立即重试请求。

    【讨论】:

      猜你喜欢
      • 2014-10-11
      • 2015-07-27
      • 2015-03-18
      • 2016-02-22
      • 1970-01-01
      • 2019-10-12
      • 2023-03-10
      • 1970-01-01
      • 2017-11-06
      相关资源
      最近更新 更多