簡述:
在上一節(jié)中介紹了一下NSURLSession
,也介紹了一下NSURLSessionDownloadTask
的普通下載圖片使用蘸嘶,并沒有使用到具有進度的下載,那么在這一節(jié)中陪汽,我們看看如何使用進度下載训唱,實時的進行界面的更新,這里的界面的更新也就是我們的Progress View(進度條)控件進度的一個更新
代碼:
1挚冤、首先在storyboard里面拖入一個Progress View(進度條)控件,并且在控制器中拖入Progress View屬性况增,用于后面的界面更新
@interface ViewController ()<NSURLSessionDownloadDelegate>
@property (weak, nonatomic) IBOutlet UIProgressView *progressView;
@end
2、完成上面的步驟了训挡,那么現(xiàn)在就是進行三部曲了
2.1澳骤、創(chuàng)建NSURLSession
2.2、創(chuàng)建任務(task)
2.3澜薄、執(zhí)行任務
- (void)viewDidLoad {
[super viewDidLoad];
// 1.創(chuàng)建NSURLSession
/*
第一個參數(shù): 全局的配置
第二個參數(shù): 讓誰成為session的代理
第三個參數(shù): 告訴系統(tǒng)代理方法在哪個線程中執(zhí)行
*/
//1.1創(chuàng)建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]];
// 2为肮、利用NSURLSessionDownloadTask創(chuàng)建任務(task)
NSURLSessionDownloadTask *task = [session downloadTaskWithURL:url];
// 3、執(zhí)行任務
[task resume];
}
3肤京、基本上到這里就是設置代理了颊艳,代理一運行,我們就完事了,
/*
1.接收到服務器返回的數(shù)據(jù)
bytesWritten: 當前這一次寫入的數(shù)據(jù)大小
totalBytesWritten: 已經(jīng)寫入到本地文件的總大小
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);
//1温治、生成的Caches地址
NSString *cacepath = [[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingString:downloadTask.response.suggestedFilename];
//2、移動圖片的存儲地址
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(@"請求失敗");
}
}
補充
在代理中戒悠,我們有兩個重要的代理方法:
- 第一個接受服務器返回的數(shù)據(jù)熬荆,里面的話給我們傳過來三個參數(shù):
1、當前返回數(shù)據(jù)的大小
2绸狐、已經(jīng)寫入臨時文件數(shù)據(jù)的大小
3卤恳、下載數(shù)據(jù)的總大小
那么在這個代理方法里面就是設置好我們Progress View(進度條)控件的進度的,只要第二個重要的代理方法就是
第二個就是下載完成之后寒矿,回調(diào)的方法突琳,里面?zhèn)鹘o我們兩個參數(shù):
1、請求信息已經(jīng)響應信息
2符相、下載完拆融,文件保存的路徑(路徑為我們沙盒的temp臨時文件夾,里面的數(shù)據(jù)隨時可能被刪除)
我們可以在這個方法中把所下載的文件啊终,移動到某一個長期保存而不會隨時刪除的文件夾中镜豹,這里我是把它保存到我們的Caches中去了
結(jié)束
本章到此結(jié)束
歡迎各位碼友隨意轉(zhuǎn)載并指正