【问题标题】:downloadTaskWithURL how to get the actual data [duplicate]downloadTaskWithURL 如何获取实际数据[重复]
【发布时间】:2016-02-26 06:29:27
【问题描述】:

我正在尝试下载图片。

这是图片的链接

https://www.google.it/images/branding/googlelogo/2x/googlelogo_color_272x92dp.png

我所做的是:

   let url = NSURL(string: "https://www.google.it/images/branding/googlelogo/2x/googlelogo_color_272x92dp.png")
        let session = NSURLSession.sharedSession()
        let task = session.downloadTaskWithURL(url!, completionHandler: {(url, response, error) in
            if let error = error {
                print("error = \(error)")
            }

            if let response = response {
                print("response = \(response)")
            }

        })
        task.resume()

我真的有回应,我可以在日志中看到如下:

response = <NSHTTPURLResponse: 0x7fc1a1427060> { URL: https://www.google.it/images/branding/googlelogo/2x/googlelogo_color_272x92dp.png } { status code: 200, headers {
    "Cache-Control" = "private, max-age=31536000";
    "Content-Length" = 13504;
    "Content-Type" = "image/png";
    Date = "Mon, 23 Nov 2015 23:57:55 GMT";
    Expires = "Mon, 23 Nov 2015 23:57:55 GMT";
    "Last-Modified" = "Fri, 04 Sep 2015 22:33:08 GMT";
    Server = sffe;
    "alt-svc" = "quic=\"www.google.com:443\"; p=\"1\"; ma=600,quic=\":443\"; p=\"1\"; ma=600";
    "alternate-protocol" = "443:quic,p=1";
    "x-content-type-options" = nosniff;
    "x-xss-protection" = "1; mode=block";
} }

我的问题是响应中没有 数据 来获取实际图像。我曾经打电话给dataTaskWithRequest,它的clouser有这样的数据:

session.dataTaskWithRequest(request, completionHandler: {(data, response, error)

但是这里我没有找到数据,请问我哪里错了?

【问题讨论】:

    标签: ios swift nsurlsession nsurlsessiondownloadtask


    【解决方案1】:

    当使用“下载”任务时,您需要实现会话委托方法来获取数据。下载任务将数据放入一个临时文件中,然后调用代理告诉它该文件的位置。

    如果您在下载委托中实现URLSession:downloadTask:didFinishDownloadingToURL:,则将使用指向临时文件的文件 URL 调用该方法。

    如果图像不是太大,您可以改用数据样式的任务。他们将数据下载到内存中,然后在完成处理程序中为您提供NSData 对象。

    【讨论】:

    • 听起来不错,但请问我怎样才能添加那个代表?
    • 我知道我必须创建一个采用协议的类,并且我必须编写函数did finish download to url 对吗?如果是,协议是什么以及如何告诉会话使用它?
    • NSURLSession 有一个名为delegate 的属性,它可以是任何采用NSURLSessionDelegate 协议的对象。您需要有一个采用协议并将其分配给该属性的对象。
    • NSURLSessionDelegate 协议中没有didFinishDownloadingToURL 函数。这是正确的方法吗?
    • documentation for NSURLSessionDelegate 解释说 “除了本协议中定义的方法外,大多数委托还应实现 NSURLSessionTaskDelegate、NSURLSessionDataDelegate 和 NSURLSessionDownloadDelegate 协议中的部分或全部方法来处理任务级事件。”
    猜你喜欢
    • 2015-07-14
    • 2017-07-27
    • 1970-01-01
    • 2010-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-06
    • 1970-01-01
    相关资源
    最近更新 更多