在完成 NSURLSession 后获取 NSData



我正在使用NSURLSession获取数据,但我不知道下载完成后如何取回数据 我的代码:

class ViewController: UIViewController,NSURLSessionDelegate,NSURLSessionDataDelegate{
@IBOutlet var imageView: UIImageView!
@IBOutlet weak var progress: UIProgressView!
var buffer:NSMutableData = NSMutableData()
var session:NSURLSession?
var dataTask:NSURLSessionDataTask?
let url = NSURL(string:"https://initiate.alphacoders.com/download/wallpaper/566046/images7/jpg/37100/1353" )!
var expectedContentLength = 0
var downloadedImage = UIImage()
var downloadedData = NSData()

override func viewDidLoad() {
    super.viewDidLoad()
    progress.progress = 0.0
    let configuration = NSURLSessionConfiguration.defaultSessionConfiguration()
    let manqueue = NSOperationQueue.mainQueue()
    session = NSURLSession(configuration: configuration, delegate:self, delegateQueue: manqueue)
    dataTask = session?.dataTaskWithRequest(NSURLRequest(URL: url))
    dataTask?.resume()
    // Do any additional setup after loading the view, typically from a nib.
}
func URLSession(session: NSURLSession, dataTask: NSURLSessionDataTask, didReceiveResponse response: NSURLResponse, completionHandler: (NSURLSessionResponseDisposition) -> Void) {
    //here you can get full lenth of your content
    expectedContentLength = Int(response.expectedContentLength)
    print(expectedContentLength)
    completionHandler(NSURLSessionResponseDisposition.Allow)
}
func URLSession(session: NSURLSession, dataTask: NSURLSessionDataTask, didReceiveData data: NSData) {
    if progress.progress > 0.99 {
        downloadedImage = UIImage(data: data , scale:  1)!
    }
    buffer.appendData(data)
    print("checking")
    let percentageDownloaded = Float(buffer.length) / Float(expectedContentLength)
    progress.progress =  percentageDownloaded
}
func URLSession(session: NSURLSession, task: NSURLSessionTask, didCompleteWithError error: NSError?) {
    //use buffer here.Download is done
    progress.progress = 1.0// download 100% complete
    imageView.image = downloadedImage
}
}

我试图从func URLSession(session: NSURLSession, dataTask: NSURLSessionDataTask, didReceiveData获取数据,但didReceiveData我的文件尚未完全下载,我不知道如何从didCompleteWithError函数中获取数据,我是 swift 的新手,仍在这里弄清楚事情,

如果有人知道我在这里错过了什么或我应该做什么,那么请告诉我,任何指导都将非常感激和有帮助。

- URLSession:downloadTask:didFinishDownloadingToURL:

是你缺少的东西。

调用以通知委托下载任务已完成下载。

此方法为您提供临时文件的文件 URL(第三个参数)。由于该文件是临时的,因此在从此委托方法返回之前,必须打开文件进行读取或将其移动到应用的沙盒容器目录中的永久位置。

在此处查找更多信息。

编辑 1:要检查进度覆盖以下方法:

- URLSession:downloadTask:didWriteData:totalBytesWritten:totalBytesExpectedToWrite:

编辑2:好的,我现在明白了。进行以下更改,看看它是否有效?

  1. 让您的类符合NSURLSessionDownloadDelegate
  2. dataTask = session?.dataTaskWithRequest(NSURLRequest(URL: url))更改为dataTask = session?.downloadTaskWithURL(NSURLRequest(URL: url))

这应该使您下载文件。

最新更新