为啥 NSURLConnection 失败,错误 Domain=NSURLErrorDomain Code=-1005 “网络连接丢失。”在 Swift iOS8 中?

Posted

技术标签:

【中文标题】为啥 NSURLConnection 失败,错误 Domain=NSURLErrorDomain Code=-1005 “网络连接丢失。”在 Swift iOS8 中?【英文标题】:Why NSURLConnection failed with Error Domain=NSURLErrorDomain Code=-1005 "The network connection was lost." in Swift iOS8?为什么 NSURLConnection 失败,错误 Domain=NSURLErrorDomain Code=-1005 “网络连接丢失。”在 Swift iOS8 中? 【发布时间】:2014-10-28 09:31:25 【问题描述】:

我使用 Xcode beta6。 我创建了一个具有 Downloader 类的应用程序,这是 Downloader 类:

class Downloader : NSObject 

    private var _connection : NSURLConnection?
    private var _downloadedData: NSMutableData?

    func getDataFromURLString(urlToRequest: String!, aType: DownloadedDataType) 

        _downloadedData = NSMutableData()

        var request : NSMutableURLRequest = NSMutableURLRequest(URL: NSURL(string: urlToRequest), cachePolicy: .ReloadIgnoringLocalCacheData, timeoutInterval: 20.0)
        request.setValue("", forHTTPHeaderField: "Accept-Encoding")

        self._connection = NSURLConnection(request: request, delegate:self)
    

    func connection(connection: NSURLConnection!, didReceiveResponse response: NSURLResponse!) 
        println("Data expected size: \(response.expectedContentLength)")
    

    func connectionDidFinishLoading(connection: NSURLConnection!) 
        println("finished")
    

    func connection(connection: NSURLConnection!, didFailWithError error: NSError!) 
        println("error: \(error)")
    

    func connection(connection: NSURLConnection!, didReceiveData data: NSData!)  
        _downloadedData?.appendData(data)
    


当服务器通过 LAN 电缆连接到网络时,此类运行良好并获得正确的 JSON 结果,但是当此服务器通过 WiFi 连接到同一网络时,我从 ios 设备收到此错误:

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

但这真的很奇怪,因为如果我将 json 路径粘贴到浏览器中,我会看到 json .. 所以只有在 iOS 设备上无法处理,但我不知道我应该修复什么.. 谁能帮帮我?

所以,如果我用来开发的 Mac mini 在 LAN 上,而服务器在 LAN 上,那么一切正常。 但是当我的 Mac mini 在 WiFi 上并且我的服务器在 Wifi 上时,我得到了这个错误......

【问题讨论】:

退出模拟器并重新运行您的项目。 NSURLConnection GET request returns -1005, "the network connection was lost"的可能重复 【参考方案1】:

嗯,我的第一个问题是,您是否尝试过在 Objective-C / iOS 7 中使用相同的逻辑/代码完成相同的任务?这会让我们知道这是 Swift、iOS 8 中的问题还是您的代码中的问题。如果有,请在编辑/更新中发布此代码。

第二个问题:为什么要覆盖接受编码?许多服务器需要一些东西如果你指定了标头值。最好删除它。

第三个问题:您运行的是哪个版本的 iOS 8 测试版? FWIW,对 SO 的简单搜索显示了这个问题: Error Domain=NSURLErrorDomain Code=-1005 "The network connection was lost."

所以它可能是 iOS 8 测试版中的一个错误。我建议先尝试objective-c,如果这也失败了,请转到开发者论坛并发布您的问题以引起Apple 的注意。您可能还想为它打开一个雷达。

【讨论】:

有解决办法吗?我在使用 iOS8(首次公开发布)和 Objective-C 时遇到了同样的问题,但只在我的家庭 WiFi 上。该错误不会发生在我的办公室或我尝试的其他 WiFi 网络中。当我卷曲端点时它工作正常,所以这绝对是 NSURLConnection 的边缘问题 那是一组不同的情况,所以可能需要一个新问题(请随时与适当的日志链接,我会看看。)话虽如此,你看到我后面的答案了吗答案的链接? iOS 8 的 NSURLConnection 上的 HTTP Keep-alive 似乎有些奇怪。也许就是这样? 啊,我完全错过了你的链接。这绝对是同一个保活问题。谢谢。 我在应用委托中的 didfinshluanchingwithoptions 方法中点击 GET 类型的 API 时遇到问题。但是任何其他视图控制器都命中了相同的 API,它工作正常。每次的错误都是“网络连接丢失”【参考方案2】:

我通过删除我的 Wi-Fi 网络连接并通过从网络连接列表中选择它并再次提供密码来重新实例化它完全解决了这个问题。在页面底部查看我的堆栈溢出响应:

NSURLConnection GET request returns -1005, "the network connection was lost"

【讨论】:

如果您的其他 Stack Overflow 帖子可以回答此问题,那么您应该将此问题标记为重复问题,而不是发布答案...

以上是关于为啥 NSURLConnection 失败,错误 Domain=NSURLErrorDomain Code=-1005 “网络连接丢失。”在 Swift iOS8 中?的主要内容,如果未能解决你的问题,请参考以下文章

NSURLSession/NSURLConnection HTTP 加载失败(kCFStreamErrorDomainSSL,-9813)错误不是在所有 iPhone 上?

POST 值在 ios 9 中出现错误(NSURLSession/NSURLConnection HTTP 加载失败(kCFStreamErrorDomainSSL,-9813)

如果 proxy.pac 下载失败,NSURLConnection 自动直接连接

Xcode 7.3:NSURLSession/NSURLConnection HTTP 加载失败(kCFStreamErrorDomainSSL,-9802)

在 Apple 的开发人员文档中找不到所需的 NSURLConnection 委托方法。为啥?

ios:NSURLConnection sendAsynchronousRequest 为啥不起作用?