当前位置: 首页 > 面试题库 >

在iOS 9中不推荐使用sendAsynchronousRequest,如何更改代码以进行修复

戎亦
2023-03-14
问题内容

以下是我遇到的代码:

func parseFeedForRequest(request: NSURLRequest, callback: (feed: RSSFeed?, error: NSError?) -> Void)
{
    NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue.mainQueue()) { (response, data, error) -> Void in

        if ((error) != nil)
        {
            callback(feed: nil, error: error)
        }
        else
        {
            self.callbackClosure = callback

            let parser : NSXMLParser = NSXMLParser(data: data!)
            parser.delegate = self
            parser.shouldResolveExternalEntities = false
            parser.parse()
        }
    }
}

从iOS
9开始不推荐使用此方法,并告诉我改用dataTaskWithRequest。有人可以帮我用dataTask更改sendAsync,我不知道该怎么做。


问题答案:

NSURLSession像下面这样使用,

对于Objective-C

NSURLSession *session = [NSURLSession sharedSession];
[[session dataTaskWithURL:[NSURL URLWithString:"YOUR URL"]
          completionHandler:^(NSData *data,
                              NSURLResponse *response,
                              NSError *error) {
            // handle response

  }] resume];

对于Swift,

    var request = NSMutableURLRequest(URL: NSURL(string: "YOUR URL")!)
    var session = NSURLSession.sharedSession()
    request.HTTPMethod = "POST"

    var params = ["username":"username", "password":"password"] as Dictionary<String, String>

    request.HTTPBody = try? NSJSONSerialization.dataWithJSONObject(params, options: [])

    request.addValue("application/json", forHTTPHeaderField: "Content-Type")
    request.addValue("application/json", forHTTPHeaderField: "Accept")

    var task = session.dataTaskWithRequest(request, completionHandler: {data, response, error -> Void in
        print("Response: \(response)")})

    task.resume()

对于异步查询,来自Apple
文档

与大多数网络API一样,NSURLSession API是高度异步的。根据您调用的方法,它以两种方式之一返回数据:

到完成处理程序块,该块在传输成功完成或发生错误时将数据返回到您的应用程序。

通过在接收数据时在自定义委托上调用方法。

下载到文件完成后,通过在自定义委托上调用方法。



 类似资料:
  • 你能帮助采用代码iOS7吗?我有代码: 但是Xcode说size的字体:字体size的字体:字体和线型断开模式在iOS7中已弃用。 请帮我更新这一行代码。

  • 你好,我正在使用以下函数将数据集中的所有分类值转换为数字,但我想将其转换为使用OneHotEncoder,如何做到这一点? 谢谢

  • 问题内容: 我想我的调用或当我指定一个文件被修改浏览器。修改文件后,我该如何“观看”该文件以执行某些操作? 以编程方式看来,这些步骤是..基本上每秒设置一个永无休止的间隔,并缓存初始修改日期,然后每当更改一次调用X时便比较该日期。 问题答案: 如前所述,您可以使用pyinotify: 例如: 这比轮询更有效。内核会告诉您何时进行操作,而无需您不断询问。

  • 我收到此错误,并且尝试将更改为仍然收到不同的错误。

  • 这不是如何配置主题选项的副本,从这样的答案中可以清楚地看出。 我想修改或调整当前设置,意思是:我想加载当前配置的内容。例如,当前为配置的值,以便能够稍微调整它,比如使颜色更亮。 当我在中加载此键时,我看到默认为红色(),这显然不是主题所拥有的。 我知道我可以 1) 打开 2) 找到设置和 3) 复制/粘贴我的用户设置。但我正在寻找一种更友好/更简单的方法。 有没有更友好/更简单的方法?如何在我的用

  • Hi下面是我的bash脚本。它需要一个源文件和一个令牌文件,令牌文件包含servicename:用法我必须在源文件中逐行查找servicename,如果找到,然后计算内存使用量,然后用-Xmx\d{1,3}m更改-Xmxm。在下面的脚本粗线解释做什么多简单你可以先下站问题从下面的小部分脚本 那么上面的错误是什么