連線下載進度條
何時使用callback
何時使用Delegate
連線code
1. .h繼承檔案
2 code
@interface ViewController : UIViewController <NSURLSessionDataDelegate, NSURLSessionDelegate>, NSURLSessionTaskDelegate>
-(void)getData{ //建立連線 -(void)getData{ NSString *urlStr = @"http://international.download.nvidia.com/geforce-com/international/images/assassins-creed-iv-black-flag/assassins-creed-iv-black-flag-pc-screenshot-01.png"; NSURL *url = [NSURL URLWithString:urlStr]; NSURLSessionConfiguration *conf = [NSURLSessionConfiguration defaultSessionConfiguration]; NSURLSession *session = [NSURLSession sessionWithConfiguration:conf delegate:self delegateQueue:[NSOperationQueue new]]; NSURLSessionDataTask *dt = [session dataTaskWithURL:url]; [dt resume]; } // 每次回傳一部分資料 -(void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveResponse:(NSURLResponse *)response completionHandler:(void (^)(NSURLSessionResponseDisposition))completionHandler{ //NSLog(@"%@", response); fileSize = [response expectedContentLength]; completionHandler(NSURLSessionResponseAllow); } //回傳標頭檔 並處理檔案累加 計算progress bar 百分比 -(void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveData:(NSData *)data{ //NSLog(@"TEST"); [fileData appendData:data]; long long currentSize = [fileData length]; //NSLog(@"%f", currentSize*1.0/fileSize); dispatch_async(dispatch_get_main_queue(), ^{ progess.progress = currentSize*1.0/fileSize; }); } //完成後執行 -(void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error{ if (!error) { dispatch_async(dispatch_get_main_queue(), ^{ imgv.image = [[UIImage alloc] initWithData:fileData]; }); } else { // 處理錯誤 } }
留言
張貼留言