官方建議AFN的使用方法
1. 定義一個全局的AFHttpClient:包含有
1> baseURL
2> 請求
3> 操作隊列 NSOperationQueue
2. 由AFHTTPRequestOperation負(fù)責(zé)所有的網(wǎng)絡(luò)操作請求
4. 修改xxx-Prefix.pch文件
#import <MobileCoreServices/MobileCoreServices.h>
#import <SystemConfiguration/SystemConfiguration.h>
1 #import "ViewController.h" 2 #import "AFNetworking.h" 3 #import "SSZipArchive.h" 4 5 @interface ViewController () 6 { 7 // AFN的客戶端,使用基本地址初始化,同時會實例化一個操作隊列,以便于后續(xù)的多線程處理 8 AFHTTPClient *_httpClient; 9 10 // 下載操作11 AFHTTPRequestOperation *_downloadOperation;12 13 NSOperationQueue *_queue;14 }15
//下載進(jìn)度條顯示16 @property (weak, nonatomic) IBOutlet UIProgressView *progressView;17 18 @end19 20 @implementation ViewController21 /*22 關(guān)于文件下載,在Documents中保存的文件,一定是要應(yīng)用程序產(chǎn)生的文件或者數(shù)據(jù)23 沒有明顯提示用戶下載到本地的文件不能保存在Docuemnts中!24 25 26 */27 28 - (void)viewDidLoad29 {30 [super viewDidLoad];31 32 NSURL *url = [NSURL URLWithString:@"http://192.168.3.251/~apple/itcast"];33 _httpClient = [[AFHTTPClient alloc] initWithBaseURL:url];34 35 _queue = [[NSOperationQueue alloc] init];36 }
1 #pragma mark 下載 2 - (IBAction)download 3 { 4 // 1. 建立請求 5 NSURLRequest *request = [_httpClient requestWithMethod:@"GET" path:@"download/Objective-C2.0.zip" parameters:nil]; 6 7 // 2. 操作 8 AFHTTPRequestOperation *op = [[AFHTTPRequestOperation alloc] initWithRequest:request]; 9 10 _downloadOperation = op;11 12 // 下載13 // 指定文件保存路徑,將文件保存在沙盒中14 NSArray *docs = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);15 NSString *path = [docs[0] stringByAppendingPathComponent:@"download.zip"];16 17 op.outputStream = [NSOutputStream outputStreamToFileAtPath:path append:NO];18 19 // 設(shè)置下載進(jìn)程塊代碼20 /*21 bytesRead 當(dāng)前一次讀取的字節(jié)數(shù)(100k)22 totalBytesRead 已經(jīng)下載的字節(jié)數(shù)(4.9M)23 totalBytesExpectedToRead 文件總大小(5M)24 */25 [op setDownloadProgressBlock:^(NSUInteger bytesRead, long long totalBytesRead, long long totalBytesExpectedToRead) {26 27 // 設(shè)置進(jìn)度條的百分比28 CGFloat precent = (CGFloat)totalBytesRead / totalBytesExpectedToRead;29 NSLog(@"%f", precent);30 31 _progressView.progress = precent;32 }];33 34 // 設(shè)置下載完成操作35 [op setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responSEObject) {36 37 // 下載完成之后,解壓縮文件38 /*39 參數(shù)1:要解結(jié)壓縮的文件名及路徑 path - > download.zip40 參數(shù)2:要解壓縮到的位置,目錄 - > document目錄41 */42 [SSZipArchive unzipFileAtPath:path toDestination:docs[0]];43 44 // 解壓縮之后,將原始的壓縮包刪除45 // NSFileManager專門用于文件管理操作,可以刪除,復(fù)制,移動文件等操作46 // 也可以檢查文件是否存在47 [[NSFileManager defaultManager] removeItemAtPath:path error:nil];48 49 // 下一步可以進(jìn)行進(jìn)一步處理,或者發(fā)送通知給用戶。50 NSLog(@"下載成功");51 } failure:^(AFHTTPRequestOperation *operation, NSError *error) {52 NSLog(@"下載失敗");53 }];54 55 // 啟動下載56 [_httpClient.operationQueue addOperation:op];57 }
1 - (IBAction)pauseResume:(id)sender 2 { 3 // 關(guān)于暫停和繼續(xù),AFN中的數(shù)據(jù)不是線程安全的 4 // 如果使用操作的暫停和繼續(xù),會使得數(shù)據(jù)發(fā)生混亂 5 // 不建議使用此功能。 6 // 有關(guān)暫停和后臺下載的功能,NSURLsession中會介紹。 7 if (_downloadOperation.isPaused) { 8 [_downloadOperation resume]; 9 } else {10 [_downloadOperation pause];11 }12 }
1 #pragma mark 檢測網(wǎng)路狀態(tài) 2 /* 3 AFNetworkReachabilityStatusUnknown = -1, 未知 4 AFNetworkReachabilityStatusNotReachable = 0, 未連接 5 AFNetworkReachabilityStatusReachableViaWWAN = 1, 3G 6 AFNetworkReachabilityStatusReachableViaWiFi = 2, 無線連接 7 */ 8 - (IBAction)checkNetwork:(id)sender 9 {10 // 1. AFNetwork 是根據(jù)是否能夠連接到baseUrl來判斷網(wǎng)絡(luò)連接狀態(tài)的11 // 提示:最好使用門戶網(wǎng)站來判斷網(wǎng)絡(luò)連接狀態(tài)。12 NSURL *url = [NSURL URLWithString:@"http://www.baidu.com"];13 14 AFHTTPClient *client = [[AFHTTPClient alloc] initWithBaseURL:url];15 _httpClient = client;16 17 [_httpClient setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {18 19 // 之所以區(qū)分無線和3G主要是為了替用戶省錢,省流量20 // 如果應(yīng)用程序占流量很大,一定要提示用戶,或者提供專門的設(shè)置,僅在無線網(wǎng)絡(luò)時使用!21 switch (status) {22 case AFNetworkReachabilityStatusReachableViaWiFi:23 NSLog(@"無線網(wǎng)絡(luò)");24 break;25 case AFNetworkReachabilityStatusReachableViaWWAN:26 NSLog(@"3G網(wǎng)絡(luò)");27 break;28 case AFNetworkReachabilityStatusNotReachable:29 NSLog(@"未連接");30 break;31 case AFNetworkReachabilityStatusUnknown:32 NSLog(@"未知錯誤");33 break;34 }35 }];36 }
作者: 清澈Saup
出處: http://www.survivalescaperooms.com/qingche/
本文版權(quán)歸作者和博客園共有,歡迎轉(zhuǎn)載,但必須保留此段聲明,且在文章頁面明顯位置給出原文連接。
新聞熱點
疑難解答
圖片精選