簡述:服務器
在上一節中介紹了一下NSURLSession
,也介紹了一下NSURLSessionDownloadTask
的普通下載圖片使用,並無使用到具備進度的下載,那麼在這一節中,咱們看看如何使用進度下載,實時的進行界面的更新,這裏的界面的更新也就是咱們的Progress View(進度條)控件進度的一個更新session
代碼:atom
一、首先在storyboard裏面拖入一個Progress View(進度條)控件,而且在控制器中拖入Progress View屬性,用於後面的界面更新 @interface ViewController ()<NSURLSessionDownloadDelegate> @property (weak, nonatomic) IBOutlet UIProgressView *progressView; @end 二、完成上面的步驟了,那麼如今就是進行三部曲了 2.一、建立NSURLSession 2.二、建立任務(task) 2.三、執行任務 - (void)viewDidLoad { [super viewDidLoad]; // 1.建立NSURLSession /* 第一個參數: 全局的配置 第二個參數: 讓誰成爲session的代理 第三個參數: 告訴系統代理方法在哪一個線程中執行 */ //1.1建立URL NSURL *url = [NSURL URLWithString:@"http://d.pcs.baidu.com/file/2b66fa1c93d8322d5299a1befc59b16c?fid=204559171-250528-1042286675318370&time=1453435914&rt=sh&sign=FDTAERV-DCb740ccc5511e5e8fedcff06b081203-X%2Bcz8N4IQb25c4wIKAyYl1HHW2M%3D&expires=8h&chkv=1&chkbd=0&chkpc=&dp-logid=498837374116132296&dp-callid=0&r=107651804"]; NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration] delegate:self delegateQueue:[NSOperationQueue mainQueue]]; // 二、利用NSURLSessionDownloadTask建立任務(task) NSURLSessionDownloadTask *task = [session downloadTaskWithURL:url]; // 三、執行任務 [task resume]; } 三、基本上到這裏就是設置代理了,代理一運行,咱們就完事了, /* 1.接收到服務器返回的數據 bytesWritten: 當前這一次寫入的數據大小 totalBytesWritten: 已經寫入到本地文件的總大小 totalBytesExpectedToWrite : 被下載文件的總大小 */ - (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didWriteData:(int64_t)bytesWritten totalBytesWritten:(int64_t)totalBytesWritten totalBytesExpectedToWrite:(int64_t)totalBytesExpectedToWrite { //給progressView賦值進度 self.progressView.progress = 1.0 * totalBytesWritten / totalBytesExpectedToWrite; } /* 2.下載完成 downloadTask:裏面包含請求信息,以及響應信息 location:下載後自動幫我保存的地址 */ - (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didFinishDownloadingToURL:(NSURL *)location { //location爲下載好的文件路徑 //NSLog(@"didFinishDownloadingToURL, %@", location); //一、生成的Caches地址 NSString *cacepath = [[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingString:downloadTask.response.suggestedFilename]; //二、移動圖片的存儲地址 NSFileManager *manager = [NSFileManager defaultManager]; [manager moveItemAtURL:location toURL:[NSURL fileURLWithPath:cacepath] error:nil]; } /* 3.請求完畢 若是有錯誤, 那麼error有值 */ - (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error { if (!error) { NSLog(@"請求成功"); }else{ NSLog(@"請求失敗"); } }
補充
在代理中,咱們有兩個重要的代理方法:url
一、當前返回數據的大小
二、已經寫入臨時文件數據的大小
三、下載數據的總大小
那麼在這個代理方法裏面就是設置好咱們Progress View(進度條)控件的進度的,只要第二個重要的代理方法就是線程
第二個就是下載完成以後,回調的方法,裏面傳給咱們兩個參數:3d
一、請求信息已經響應信息
二、下載完,文件保存的路徑(路徑爲咱們沙盒的temp臨時文件夾,裏面的數據隨時可能被刪除)
代理
咱們能夠在這個方法中把所下載的文件,移動到某一個長期保存而不會隨時刪除的文件夾中,這裏我是把它保存到咱們的Caches中去了code
結束圖片
本章到此結束 歡迎各位碼友隨意轉載並指正