来自NSURLSessionDownloadDelegate的数据存储在哪里?

时间:2015-04-16 08:59:58

标签: ios swift nsurlsession

所以当我运行这个功能时

func run(u: String) {
    let URL = NSURL(string: u)
    let config = NSURLSessionConfiguration.defaultSessionConfiguration()
    let session = NSURLSession(configuration: config, delegate: self, delegateQueue: nil)
    let dtask = session.downloadTaskWithURL(URL!)
    dtask.resume()
}

我期待这种方法:

func URLSession(session: NSURLSession, downloadTask: NSURLSessionDownloadTask, didFinishDownloadingToURL location: NSURL) {
    NSOperationQueue.mainQueue().addOperationWithBlock({
        let text = NSString(contentsOfURL: location, encoding: NSUTF8StringEncoding, error: nil)
        println(text)
        self.done()
    })
}

打印已下载文件的位置,但始终返回nil。

它不应该返回实际路径吗?甚至location变量也总是为零......

1 个答案:

答案 0 :(得分:1)

func URLSession(session: NSURLSession, downloadTask: NSURLSessionDownloadTask, didFinishDownloadingToURL location: NSURL) {
        let text = NSString(contentsOfURL: location, encoding: NSUTF8StringEncoding, error: nil)
        println(text)
        self.done()
 )

尝试上面的代码

在此方法didFinishDownloadingToURL返回之前,您必须保存下载的数据。

例如,您可以在内存中使用它或将tmp文件移动到另一个dic。

如果你使用你的代码,当你执行你的块时,方法已经返回。因为如果你使用addOperationwithBlock,它是一个异步块。它将先返回,然后执行该块。 所以在你的情况下,当你完成下载后,你的方法首先返回,然后你执行block.So,你什么都没有