首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更新到Swift 2.0后NSURLConnection抛出

更新到Swift 2.0后NSURLConnection抛出
EN

Stack Overflow用户
提问于 2015-06-14 23:05:18
回答 2查看 6.7K关注 0票数 3

在Swift 2.0更新之前,此代码可以完美地使用PHP脚本从服务器下载我的JSON文件:

代码语言:javascript
复制
let url = NSURL(string: webAdress)
let cachePolicy = NSURLRequestCachePolicy.ReloadIgnoringLocalAndRemoteCacheData
var request = NSMutableURLRequest(URL: url!, cachePolicy: cachePolicy, timeoutInterval: 5.0)

var response: NSURLResponse? = nil
var error: NSError? = nil
let reply = NSURLConnection.sendSynchronousRequest(request, returningResponse:&response, error:&error)

在更新之后,Xcode要求我做一些更改。我这样做了,代码没有错误,但它总是抛出...

代码语言:javascript
复制
    let url = NSURL(string: webAdress)
    let cachePolicy = NSURLRequestCachePolicy.ReloadIgnoringLocalAndRemoteCacheData
    let request = NSMutableURLRequest(URL: url!, cachePolicy: cachePolicy, timeoutInterval: 5.0)

    var response: NSURLResponse? = nil
    var reply = NSData()
    do {
    reply = try NSURLConnection.sendSynchronousRequest(request, returningResponse:&response)
    } catch {
        print("ERROR")
    }

期待您的解决方案!

EN

回答 2

Stack Overflow用户

发布于 2015-06-15 00:04:14

这里有一个使用新NSURLSession的例子--显然,NSURLConnection在iOS 9中已经被弃用了。

代码语言:javascript
复制
let url = NSURL(string: webAddress)
let request = NSURLRequest(URL: url!, cachePolicy: .ReloadIgnoringLocalAndRemoteCacheData, timeoutInterval: 5.0)

let session = NSURLSession.sharedSession()

session.dataTaskWithRequest(request, completionHandler: {(data, response, error) in
    print(data)
    print(response)
    print(error)
})?.resume()

我认为它非常干净,只是没有太多的文档。如果您有任何问题,请让我知道这是工作。

票数 6
EN

Stack Overflow用户

发布于 2015-08-13 22:47:15

嗨,我有同样未解决的问题,Sidetalker提出的使用NSURLSession.dataTaskWithRequest的解决方案不是你想要的,因为NSURLSession应用程序接口是高度异步的(根据苹果公司的文档),并且你在swift 1.2中实现的代码是同步的。另一方面,iOS 9中已经弃用了NSURLConnection,因此您编写的代码可能不是构建的,对吧?

我建议的解决方案是:

代码语言:javascript
复制
let url = NSURL(string: webAdress)
let request: NSURLRequest = NSURLRequest(URL: url!)
let config = NSURLSessionConfiguration.defaultSessionConfiguration()
let session = NSURLSession(configuration: config)
var responseCode = -1
let group = dispatch_group_create()
dispatch_group_enter(group)
session.dataTaskWithRequest(request, completionHandler: {(_, response, _) in
if let httpResponse = response as? NSHTTPURLResponse {
    responseCode = httpResponse.statusCode
}
dispatch_group_leave(group)
})!.resume()
dispatch_group_wait(group, DISPATCH_TIME_FOREVER)
//rest of your code...

如果现在可以的话,请告诉我

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30830902

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档