1. 定義一個全局的AFHttpClient:包含有 1> baseURL 2> 請求 3> 操作隊列 NSOperationQueue 2. 由AFHTTPRequestOperation負(fù)責(zé)所有的網(wǎng)絡(luò)操作請求
0.導(dǎo)入框架準(zhǔn)備工作•1. 將框架程序拖拽進項目
•2. 添加iOS框架引用
–SystemConfiguration.framework
–MobileCoreServices.framework
•3. 引入
#import "AFNetworking.h"
//下面用于下載完后解壓
#import "SSZipArchive.h"
4. 修改xxx-Prefix.pch文件 #import <MobileCoreServices/MobileCoreServices.h> #import <SystemConfiguration/SystemConfiguration.h>
1.AFN的客戶端,使用基本地址初始化,同時會實例化一個操作隊列,以便于后續(xù)的多線程處理 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
2.利用AFN實現(xiàn)文件下載操作細(xì)節(jié) 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è)置下載進程塊代碼
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è)置進度條的百分比
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.zip
40 參數(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 // 下一步可以進行進一步處理,或者發(fā)送通知給用戶。
50 NSLog(@"下載成功");
51 } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
52 NSLog(@"下載失敗");
53 }];
54
55 // 啟動下載
56 [_httpClient.operationQueue addOperation:op];
57 }
3.關(guān)于暫停和繼續(xù)
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 }
4.檢測網(wǎng)絡(luò)狀態(tài)--優(yōu)化用戶體驗 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 }
· AFNetworking3.0+ (最新AFN) 版本使用方法可以看我最新的日志: iOS- 利用AFNetworking3.0+(最新AFN) - 實現(xiàn)文件斷點下載
作者: 清澈Saup 出處: http://www.cnblogs.com/qingche/ 本文版權(quán)歸作者和博客園共有,歡迎轉(zhuǎn)載,但必須保留此段聲明,且在文章頁面明顯位置給出原文連接。
|
|