NSURLConnection在更新到Swift 2.0后抛出
在Swift 2.0更新之前,这段代码使用PHP脚本从服务器下载我的JSON文件非常有效:NSURLConnection在更新到Swift 2.0后抛出,swift,try-catch,nsurlconnection,Swift,Try Catch,Nsurlconnection,在Swift 2.0更新之前,这段代码使用PHP脚本从服务器下载我的JSON文件非常有效: let url = NSURL(string: webAdress) let cachePolicy = NSURLRequestCachePolicy.ReloadIgnoringLocalAndRemoteCacheData var request = NSMutableURLRequest(URL: url!, cachePolicy: cachePolicy, timeoutInterval: 5
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要求我做一些更改。我做了,代码没有错误,但它总是抛出
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")
}
期待您的解决方案 下面是一个使用新NSURLSession的示例-显然,iOS 9中不推荐使用NSURLConnection
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()
我认为它非常干净,只是没有太多的文档。如果您有任何问题,请告诉我。马西米兰您好,
我也有同样的未解决的问题,Sidetalker使用NSURLSession.dataTaskWithRequest提出的解决方案不是您想要的,因为NSURLSession API是高度异步的(根据苹果文档),并且您在swift 1.2中实现的代码是同步的。
另一方面,iOS 9中不推荐使用NSURLConnection,因此您编写的代码可能没有生成,对吗
我建议的解决办法是:
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...
请告诉我现在是否可以打印错误??你可以直接在catch.print(error)中找到它——无需声明错误变量(只需为你澄清)。快看我的答案!谢谢你的回复。这是我的代码输出:
nil-nil可选(Error Domain=NSURLErrorDomain code=-1002“URL nicht unterstützt”UserInfo=0x1567d8b00{NSUnderlyingError=0x1567a8c00”Der Vorgang konnte-nicht abgeschlossen werden.(kCFErrorDomainCFNetwork Fehler-1002.),nserrorfailingurstringkey=www.
(…)_.php,nserrorfailingurkey=www.
\u(…)\ ucode>.php,NSLocalizedDescription=URL nicht unterstützt})您知道这可能是什么吗?由于出现错误,数据和响应为零。错误在那里被定义为可选的(就像数据和响应一样),所以如果你想使用这些信息,你必须打开它。您将收到错误1002,该错误对应于NSURERROUNSUPPORTEDURL,通常由缺少的http://引起。然而,这里不是这样的——我会调查这个错误。用“替换”“”,它很好(我的服务器上有SSL的问题,我正在修复中)。如果你给我提供你要点击的网址,我可以试着让它工作。这也是我目前发现的。如果你发现了什么,那将是一种乐趣!坦克很多!!!