所以当我运行这个功能时
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
变量也总是为零......
答案 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,你什么都没有