为什么在Swift iOS8中使用NSURLConnection会出现错误,错误信息为Error Domain=NSURLErrorDomain Code=-1005 "网络连接丢失"?

9
我使用的是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)
    }

}

这个类在使用局域网连接时能够正常工作并获取正确的JSON结果,但当该服务器通过WiFi连接到同一网络时,iOS设备会出现以下错误:
Error Domain=NSURLErrorDomain Code=-1005 "The network connection was lost."

但是很奇怪,如果我将json路径粘贴到浏览器中,我可以看到json。所以只有iOS设备无法处理,但我不知道应该修复什么。 有人能帮我吗?

所以,如果我用来开发的Mac mini在局域网上,并且服务器也在局域网上,一切都正常。 但是当我的Mac mini连接WiFi并且我的服务器也连接WiFi时,我会收到此错误...


退出模拟器并重新运行您的项目。 - Jayprakash Dubey
2个回答

2
好的,我的第一个问题是,您是否尝试使用Objective-C / iOS 7中相同的逻辑/代码完成相同的任务?这将让我们了解它是Swift、iOS 8中的问题还是您代码中的问题。如果您已经尝试过,请在编辑/更新中发布此代码。
第二个问题:为什么要覆盖accept-encoding?许多服务器要求指定头文件值时必须存在某些内容。最好删除它。
第三个问题:您运行的iOS 8 beta版本是什么?FWIW,SO的简单搜索显示了这个问题: Error Domain=NSURLErrorDomain Code=-1005 "The network connection was lost." 因此,这可能是iOS 8 beta中的一个错误。我建议先尝试objective-c,如果那也出错了,请转到开发者论坛并发布您的问题以引起苹果的注意。您也可以为此打开Radar。

有解决方法吗?我在使用iOS8(首个公开版本)和Objective-C时遇到了同样的问题,但只在我的家庭WiFi上出现。这个错误在我的办公室或其他尝试的WiFi网络上不会发生。当我curl端点时,它可以正常工作,所以这绝对是一个与NSURLConnection相关的边缘问题。 - user2393462435
那是一种不同的情况,所以可能需要一个新的问题(请随意链接适当的日志,我会看一下)。话虽如此,你看到我回答链接上的后来的答案了吗?在iOS 8的NSURLConnection上似乎存在一些HTTP Keep-alive的奇怪问题。也许那就是原因? - Matt S.
啊,我完全错过了你的链接。这绝对是相同的保持活动问题。谢谢。 - user2393462435
我在应用程序委托的didfinshluanchingwithoptions方法中使用GET类型的API时遇到了问题。但是,当任何其他视图控制器使用相同的API时,它可以正常工作。每次出现错误“网络连接丢失”。 - DURGESH

0
我通过删除我的 Wi-Fi 网络连接并从网络连接列表中重新实例化它,并再次提供密码来完全解决了这个问题。请参见我在页面底部的 stack overflow 回复:
NSURLConnection GET 请求返回 -1005,“网络连接丢失”

2
如果你的其他 Stack Overflow 帖子可以回答这个问题,那么你应该将这个问题标记为重复,而不是发布答案。 - nhgrif

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接