【问题标题】:sendAsynchronousRequest was deprecated in iOS 9 (Swift 2) - Transfer Code?在 iOS 9(Swift 2)中已弃用 sendAsynchronousRequest - 传输代码?
【发布时间】:2016-08-04 04:24:49
【问题描述】:

我正在使用 XCode 7.3。这是我的代码:

func postToServerFunction() {
    let url: NSURL = NSURL(string: "http://mytesturl.com")!
    let request:NSMutableURLRequest = NSMutableURLRequest(URL:url)
    //let textfeld = String(UserTextField.text)
    let bodyData = "data=" + UserTextField.text!
    request.HTTPMethod = "POST"
    request.HTTPBody = bodyData.dataUsingEncoding(NSUTF8StringEncoding);
    NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue.mainQueue())
    {
        (response, data, error) in}}

这很好用,我的 php-Script 得到了它应该得到的字符串。但是有 sendAsynchronousRequest 在 iOS 9 中已弃用 信息。 正如我所读到的,使用 Swift 2 的方法发生了变化。 我为这个错误搜索了很多,但我无法将它匹配的代码转换为 Swift 2。正如我也读到的,我应该使用类似这样的东西

let session = NSURLSession.sharedSession()
session.dataTaskWithRequest(request)

但我无法理解。实际上,我并不理解每一行。我自己编写了代码,但从一些例子来看它对我有用。

【问题讨论】:

  • 正如我所说,我知道你已经链接的帖子。但我无法用这个例子来转换它。我不知道我必须更换什么,而不是女巫线。也许有人可以解释一下。谢谢。
  • 与其自己设置 NSURLSession,我更愿意使用 Alamofire (github.com/Alamofire/Alamofire),它更优雅、更易于使用。
  • 使用Alamofire @t0day 说的。

标签: ios swift2 nsurlconnection deprecated nsurl


【解决方案1】:

这是您使用共享会话的最基本方式:

if let url = NSURL(string: "http://mytesturl.com"),
       userField = UserTextField.text {

    let request = NSMutableURLRequest(URL: url)
    let bodyData = "data=" + userField
    request.HTTPMethod = "POST"
    request.HTTPBody = bodyData.dataUsingEncoding(NSUTF8StringEncoding)

    let session = NSURLSession.sharedSession()

    let dataTask = session.dataTaskWithRequest(request,completionHandler: {(data,response,error) in


        }
    )

    dataTask.resume()
}

有关其他方法的更多详细信息,包括后台和临时会话,以及如何处理NUSRLResponse,请参阅my blogpost

【讨论】:

  • 这段代码运行良好,没有错误。非常感谢!
  • 优秀。感谢您将此标记为正确答案。
【解决方案2】:

正如您发现的那样,NSURLConnection 已被弃用,NSURLSession 是新的闪亮。

为了使您的示例正常工作,您仍然需要使用您已经创建的NSURLNSURLRequest,然后您需要一个可以以各种方式使用的NSURLSession

我可以看到你已经使用了回调,所以在你的情况下我假设它会是

session.dataTaskWithRequest(request) { (data, response, error) in
    //magic goes here
}

然后要记住的重要事情是在您的任务上致电resume()

所以...要翻译您的代码,我正在考虑这些方面

func postToServerFunction() {
    let url: NSURL = NSURL(string: "http://mytesturl.com")!
    let request:NSMutableURLRequest = NSMutableURLRequest(URL:url)
    //let textfeld = String(UserTextField.text)
    let bodyData = "data=" + UserTextField.text!
    request.HTTPMethod = "POST"
    request.HTTPBody = bodyData.dataUsingEncoding(NSUTF8StringEncoding)
    let session = NSURLSession.defaultSession()
    let task = session.dataTaskWithRequest(request) { (data, response, error) in
        //magic goes here
    }
    task.resume()
}

您可以在tutorial from raywenderlich.com 中阅读有关 NSURL 会话的更多信息

希望有帮助

【讨论】:

  • 非常感谢。如果我使用此代码,我会收到错误消息:“类型 'NSURLSession' 没有成员 'defaultSession'”,我不明白。 //magic 在这里填写什么?
  • 抱歉……不应该是NSURLSession.defaultSession(),而是NSURLSession.sharedSession()
  • 对于//magic goes here part,这是你的回调,一旦请求返回就会执行。你得到一些数据,一个响应和一个错误作为输入参数,然后你通常检查是否发生了任何错误,如果没有,然后你解包数据并将其映射到可以在视图控制器中使用的某个模型对象或在哪里你打算使用它。
猜你喜欢
  • 2015-09-05
  • 1970-01-01
  • 1970-01-01
  • 2015-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多