【发布时间】:2016-05-17 09:40:05
【问题描述】:
我正在尝试下载多个图像,结果是它一个一个地下载,有没有办法将多个文件作为一个下载?我想要发生的是,我希望它跟踪所有文件,而不是跟踪每个文件的进度的进度视图。
import UIKit
class ViewController: UIViewController, NSURLSessionDownloadDelegate {
@IBOutlet weak var progressBar: UIProgressView!
@IBOutlet weak var progressCount: UILabel!
var task : NSURLSessionTask!
var pics = ["http://pillar.foundationu.com/wp-content/uploads/2016/03/banner.jpg", "http://pillar.foundationu.com/wp-content/uploads/2016/03/Abad-Edmerl.jpg", "http://pillar.foundationu.com/wp-content/uploads/2016/03/Abellana-Deniz-Dawn-1.jpg", "http://pillar.foundationu.com/wp-content/uploads/2016/03/Abequibel-Arneth.jpg", "http://pillar.foundationu.com/wp-content/uploads/2016/03/Abilla-Harriette.jpg"]
var counter:Float = 0.0 {
didSet {
let fractionalProgress = Float(counter) / 100.0
let animated = counter != 0
progressBar.setProgress(fractionalProgress, animated: animated)
progressCount.text = ("\(counter)%")
}
//The didSet is called immediately after the new value is stored. The fractionalProgress constant keeps track of the progress.
}
lazy var session : NSURLSession = {
let config = NSURLSessionConfiguration.ephemeralSessionConfiguration()
config.allowsCellularAccess = false
let session = NSURLSession(configuration: config, delegate: self, delegateQueue: NSOperationQueue.mainQueue())
return session
}()
override func viewDidLoad() {
progressBar.setProgress(0.0, animated: true) //set progressBar to 0 at start
}
@IBAction func doElaborateHTTP (sender:AnyObject!) {
progressCount.text = "0%"
if self.task != nil {
return
}
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), {
let taskID = self.beginBackgroundUpdateTask()
var url = NSURL!()
var req = NSMutableURLRequest()
for s in self.pics {
url = NSURL(string: s)
req = NSMutableURLRequest(URL:url)
let task = self.session.downloadTaskWithRequest(req)
self.task = task
task.resume()
}
// Do something with the result
self.endBackgroundUpdateTask(taskID)
})
}
func URLSession(session: NSURLSession, downloadTask: NSURLSessionDownloadTask, didWriteData bytesWritten: Int64, totalBytesWritten writ: Int64, totalBytesExpectedToWrite exp: Int64) {
print("downloaded \(100*writ/exp)")
dispatch_async(dispatch_get_main_queue(), {
self.counter = Float(100*writ/exp)
return
})
}
func URLSession(session: NSURLSession, downloadTask: NSURLSessionDownloadTask, didResumeAtOffset fileOffset: Int64, expectedTotalBytes: Int64) {
// unused in this example
}
func URLSession(session: NSURLSession, task: NSURLSessionTask, didCompleteWithError error: NSError?) {
print("completed: error: \(error)")
}
// this is the only required NSURLSessionDownloadDelegate method
func URLSession(session: NSURLSession, downloadTask: NSURLSessionDownloadTask, didFinishDownloadingToURL location: NSURL) {
print(downloadTask.response!.suggestedFilename!)
}
}
【问题讨论】:
标签: swift2 ios9 nsurlsessiondownloadtask