AFNetworking

對(duì)于第三方的用法分析的比較好的博客, 總是有很多, 來源自網(wǎng)絡(luò)匯總!

1. 下載 ?AFNetworking(點(diǎn)我)

2. 需要引入的庫?

- CoreLocation.frameworkGET請(qǐng)求方法

- SystemConfiguration.framework

- MobileCoreServices.framework

- Security.framework

需要在 ARC 的環(huán)境下 - 非 ARC 的工程中 - 請(qǐng)?zhí)砑?-fobjc-arc

3. ? GET和POST請(qǐng)求

#import "AFNetworking.h"

?3.1 GET請(qǐng)求

- (NSURLSessionDataTask *)GET:(NSString *)URLString

parameters:(id)parameters

success:(void (^)(NSURLSessionDataTask *task, id responseObject))success

failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure

POST請(qǐng)求方法

- (NSURLSessionDataTask *)POST:(NSString *)URLString

parameters:(id)parameters

success:(void (^)(NSURLSessionDataTask *task, id responseObject))success

failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure

進(jìn)行封裝, 使用的時(shí)候使用相應(yīng)的方法

?封裝內(nèi)部GET方法

+ (void)getDataWithUrl:(NSString *)str completion:(void (^)(NSData *))block

{

NSString *docPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject]; ?

NSString *path = [NSString stringWithFormat:@"%@/%ld.aa", docPath, [str hash]];? ? ? ? // 利用hash值作為存入本地的文件名,

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; ? // ?設(shè)置管理員

manager.requestSerializer = [AFHTTPRequestSerializer serializer]; // 編碼格式默認(rèn)是?NSUTF8StringEncoding

manager.responseSerializer = [AFHTTPResponseSerializer serializer];?

NSMutableDictionary *dic = [NSMutableDictionary dictionary];

[manager GET:str parameters:dic success:^(AFHTTPRequestOperation *operation, id responseObject) {

NSLog(@"請(qǐng)求成功");

NSString *requsetTmp = [NSString stringWithString:operation.responseString];

NSData *resData = [[NSData alloc] initWithData:[requsetTmp dataUsingEncoding:NSUTF8StringEncoding]];

[resData writeToFile:path atomically:YES];

block(resData);

} failure:^(AFHTTPRequestOperation *operation, NSError *error) {

NSLog(@"請(qǐng)求失敗");

NSData *pickData = [NSData dataWithContentsOfFile:path];

block(pickData);

}];

}

這樣就封裝好了 在外部直接調(diào)用并進(jìn)行數(shù)據(jù)處理

NSString *str = @"https//****************************";

[NetWorkHandle getDataWithUrl:str completion:^(NSData *data) {

NSError *error = nil;

id result = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:&error]

// 處理JSON數(shù)據(jù)

}

3.2 POST請(qǐng)求 一樣

+ (void)postDataWithUrl:(NSString *)str completion:(void(^)(NSData *data))block

{

NSString *docPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];

//

NSString *path = [NSString stringWithFormat:@"%@/%ld.aa", docPath, [str hash]]; ? ? ? ? // 利用hash值作為存入本地的文件名, ? ?

NSLog(@"%@", path);

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];

NSMutableDictionary *dic = [NSMutableDictionary dictionary];

[manager POST:str parameters:dic success:^(AFHTTPRequestOperation *operation, id responseObject) {

NSString *requsetTmp = [NSString stringWithString:operation.responseString];

NSData *resData = [[NSData alloc] initWithData:[requsetTmp dataUsingEncoding:NSUTF8StringEncoding]];

[resData writeToFile:path atomically:YES]; // 寫入本地

block(resData);

} failure:^(AFHTTPRequestOperation *operation, NSError *error) {

NSLog(@"請(qǐng)求失敗");

NSData *pickData = [NSData dataWithContentsOfFile:path]; // 讀取本地

block(pickData);

}];

}

外部使用如GET是一樣的!?

4. 用于監(jiān)聽網(wǎng)絡(luò)狀態(tài)

AFNetworkReachabilityStatusUnknown? ? ? ? ? = -1,? // 未知

AFNetworkReachabilityStatusNotReachable? ? = 0,? // 無連接

AFNetworkReachabilityStatusReachableViaWWAN = 1,? // 3G

AFNetworkReachabilityStatusReachableViaWiFi = 2,? // WiFi

使用?

// 如果要檢測網(wǎng)絡(luò)狀態(tài)的變化,必須用檢測管理器的單例的startMonitoring

[[AFNetworkReachabilityManager ?sharedManager] ?startMonitoring];

若是網(wǎng)絡(luò)中斷, 內(nèi)部會(huì)把網(wǎng)絡(luò)請(qǐng)求的中斷, 自己可以設(shè)置提醒, 若再次連上網(wǎng), AFN會(huì)自動(dòng)進(jìn)行請(qǐng)求;

可以設(shè)置彈窗根據(jù)不同的網(wǎng)絡(luò)狀態(tài)進(jìn)行不同的提示

-(void)alert:(NSString *)message{

UIAlertView *alertView=[[UIAlertView alloc]initWithTitle:@"System Info" message:message delegate:nil cancelButtonTitle:@"Cancel" otherButtonTitles: nil];

[alertView show];

}

-(void)checkNetworkStatus{

//創(chuàng)建一個(gè)用于測試的url

NSURL *url=[NSURL URLWithString:@"http://www.apple.com"];

AFHTTPRequestOperationManager *operationManager=[[AFHTTPRequestOperationManager alloc]initWithBaseURL:url];

//根據(jù)不同的網(wǎng)絡(luò)狀態(tài)改變?nèi)プ鱿鄳?yīng)處理?

[operationManager.reachabilityManager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {

switch (status) {

case AFNetworkReachabilityStatusReachableViaWWAN:

[self alert:@"2G/3G/4G Connection."];

break;

case AFNetworkReachabilityStatusReachableViaWiFi:

[self alert:@"WiFi Connection."];

break;

case AFNetworkReachabilityStatusNotReachable:

[self alert:@"Network not found."];

break;

default:

[self alert:@"Unknown."];

break;

}

}];

//開始監(jiān)控

[operationManager.reachabilityManager startMonitoring];

}

也可以在這么寫

或者直接使用

[[AFNetworkReachabilityManager sharedManager] setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {

switch (status) {

case AFNetworkReachabilityStatusNotReachable:

[self alert:@"網(wǎng)絡(luò)無連接"];

break;

default:[self handleData];

break;

}

}];

[[AFNetworkReachabilityManager sharedManager] startMonitoring];

開始監(jiān)控, 當(dāng)然第二種簡介方便, 程序啟動(dòng)后只需要啟用一次就可以, 它在不斷的監(jiān)控, 但當(dāng)網(wǎng)絡(luò)改變的時(shí)候,? 可調(diào)用下邊方法了判斷當(dāng)前網(wǎng)絡(luò)


[[AFNetworkReachabilityManager sharedManager] startMonitoring];

一般開始監(jiān)控之后, 在用到判斷網(wǎng)絡(luò)的

AFNetworkReachabilityManager *man =? [AFNetworkReachabilityManager sharedManager]; if (man.networkReachabilityStatus != 0) {

// 做處理

} else {

? ? 按照上邊的幾種state的數(shù)值來 進(jìn)行網(wǎng)絡(luò)處理!

}


5. 下載使用?

+ (void)sessionDownloadWithUrl:(NSString*)urlStrsuccess:(void(^)(NSURL*fileURL))successfail:(void(^)())fail

{

NSURLSessionConfiguration ?*config = [NSURLSessionConfiguration ? ? ? ? ? ? ? ? ? ?defaultSessionConfiguration];

AFURLSessionManager *manager = [ [ AFURLSessionManager alloc] ? ?initWithSessionConfiguration: config];

NSString*urlString = [urlStrstringByAddingPercentEscapesUsingEncoding: ?NSUTF8StringEncoding];

NSURL*url = [NSURLURLWithString:urlString];

NSURLRequest*request = [NSURLRequestrequestWithURL:url];

NSURLSessionDownloadTask*task = [managerdownloadTaskWithRequest:requestprogress:nildestination:^NSURL*(NSURL*targetPath,NSURLResponse*response) {

// 指定下載文件保存的路徑

//? ? ? ? NSLog(@"%@ %@", targetPath, response.suggestedFilename);

// 將下載文件保存在緩存路徑中

NSString*cacheDir = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask,YES)[0];

NSString*path = [cacheDirstringByAppendingPathComponent:response.suggestedFilename];

// URLWithString返回的是網(wǎng)絡(luò)的URL,如果使用本地URL,需要注意

//? ? ? ? NSURL *fileURL1 = [NSURL URLWithString:path];

NSURL*fileURL = [NSURLfileURLWithPath:path];

//? ? ? ? NSLog(@"== %@ |||| %@", fileURL1, fileURL);

if(success) {

success(fileURL);

}

returnfileURL;

}completionHandler:^(NSURLResponse*response,NSURL*filePath,NSError*error) {

NSLog(@"%@ %@", filePath, error);

if(fail) {

fail();

}

}];

[taskresume];

}

?// ?總結(jié)于網(wǎng)絡(luò) ~~~~ 鏈接

AFNetworking 2.5使用方法

網(wǎng)絡(luò)2-AFNetworking和WebView

另外 對(duì)于AFNetworking的進(jìn)一步使用, 請(qǐng)?jiān)斠娨韵骆溄?來源CocoaChina~~~

AFNetworking2.0源碼解析<一>

AFNetworking2.0源碼解析<二>

AFNetworking2.0源碼解析<三>

AFNetworking2.0源碼解析<四>

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,527評(píng)論 6 544
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,687評(píng)論 3 429
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 178,640評(píng)論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,957評(píng)論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 72,682評(píng)論 6 413
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 56,011評(píng)論 1 329
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,009評(píng)論 3 449
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 43,183評(píng)論 0 290
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,714評(píng)論 1 336
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 41,435評(píng)論 3 359
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,665評(píng)論 1 374
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,148評(píng)論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,838評(píng)論 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,251評(píng)論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,588評(píng)論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 52,379評(píng)論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,627評(píng)論 2 380

推薦閱讀更多精彩內(nèi)容