【问题标题】:NSURLConnection throws after updating to Swift 2.0更新到 Swift 2.0 后 NSURLConnection 抛出
【发布时间】:2026-02-06 21:05:03
【问题描述】:

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

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")
    }

期待您的解决方案!

【问题讨论】:

  • 打印出错误??你可以把它放在渔获物里面。
  • print(error) 将执行此操作 - 无需声明错误变量(只是为您澄清 Rob)。请参阅我对 Swifty 方式的回答!

标签: swift try-catch nsurlconnection


【解决方案1】:

这是一个使用新的 NSURLSession 的示例 - 显然 NSURLConnection 在 iOS 9 中已被弃用。

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()

我认为它非常干净,只是没有太多文档。如果您在执行此操作时遇到任何问题,请告诉我。

【讨论】:

  • 感谢您的回复。这是我的代码输出:nil nil Optional(Error Domain=NSURLErrorDomain Code=-1002 "URL nicht unterstützt" UserInfo=0x1567d8b00 {NSUnderlyingError=0x1567a8c00 "Der Vorgang konnte nicht abgeschlossen werden. (kCFErrorDomainCFNetwork-Fehler -1002.)", NSErrorFailingURLStringKey=www._(...)_.php, NSErrorFailingURLKey=www._(...)_.php, NSLocalizedDescription=URL nicht unterstützt})
  • 你知道这可能是什么吗?
  • 数据和响应为零,因为您有错误。错误在那里被定义为可选的(就像数据和响应一样),所以如果你想使用任何这些信息,你必须打开它。您收到错误 1002,它对应于 NSURLErrorUnsupportedURL,通常是由于缺少 http:// 造成的。但是这里不是这种情况 - 我会调查错误。
  • 用“google.com”替换“droplync.com”,它工作正常(我的服务器上的 SSL 存在一些问题,我正在修复中)。如果您向我提供您正在访问的 URL,我可以尝试使用它。
  • 这也是我目前发现的。如果你能找到任何东西,那将是一种乐趣!坦克很多!!!
【解决方案2】:

马克西米利安你好, 我有同样未解决的问题,Sidetalker 使用 NSURLSession.dataTaskWithRequest 提出的解决方案不是您想要的,因为 NSURLSession API 是高度异步的(根据 Apple 文档),并且您在 swift 1.2 中实现的代码是同步的。 另一方面,NSURLConnection 在 iOS 9 中已被弃用,因此您编写的代码可能无法构建,对吧?

我建议的解决方案是:

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...

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

【讨论】:

    最近更新 更多