欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

開源中國iOS客戶端學(xué)習(xí)——(八)網(wǎng)絡(luò)通信AFNetworking類庫-創(chuàng)新互聯(lián)

AFNetworking是一個(gè)輕量級(jí)的iOS網(wǎng)絡(luò)通信類庫,繼ASI類庫不在更新之后開發(fā)者們有一套不錯(cuò)選擇;

站在用戶的角度思考問題,與客戶深入溝通,找到慶元網(wǎng)站設(shè)計(jì)與慶元網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:成都網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、主機(jī)域名、網(wǎng)站空間、企業(yè)郵箱。業(yè)務(wù)覆蓋慶元地區(qū)。

AFNetworking類庫×××和使用教程: https://github.com/AFNetworking/AFNetworking

如果想深入研究有官方文檔介紹:http://afnetworking.github.com/AFNetworking/

開源中國iOS客戶端學(xué)習(xí)——(八)網(wǎng)絡(luò)通信AFNetworking類庫

在開源中國iOS客戶端中關(guān)于AFNetworking類庫的使用只用到了兩個(gè)實(shí)例方法

(1)getPath:parameters:success:failure:

(2)postPath:parameters:success:failure:

他們用法基本相同,只是請(qǐng)求數(shù)據(jù)方式不同,一種是Get請(qǐng)求和Post請(qǐng)求。Get是向服務(wù)器發(fā)索取數(shù)據(jù)的一種請(qǐng)求,也就相當(dāng)于查詢信息功能,不會(huì)修改類容,Post是向服務(wù)器提交數(shù)據(jù)的一種請(qǐng)求,影響數(shù)據(jù)內(nèi)容;兩種方法定義:

- (void)getPath:(NSString *)path       parameters:(NSDictionary *)parameters          success:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success         failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure { 	NSURLRequest *request = [self requestWithMethod:@"GET" path:path parameters:parameters];     AFHTTPRequestOperation *operation = [self HTTPRequestOperationWithRequest:request success:success failure:failure];     [self enqueueHTTPRequestOperation:operation]; }

- (void)postPath:(NSString *)path        parameters:(NSDictionary *)parameters           success:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success          failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure { 	NSURLRequest *request = [self requestWithMethod:@"POST" path:path parameters:parameters]; 	AFHTTPRequestOperation *operation = [self HTTPRequestOperationWithRequest:request success:success failure:failure];     [self enqueueHTTPRequestOperation:operation]; }


getPath:parameters:success:failure:方法在程序中使用舉例:

NewsView.m

- (void)reload:(BOOL)noRefresh {     //如果有網(wǎng)絡(luò)連接     if ([Config Instance].isNetworkRunning) {         if (isLoading || isLoadOver) {             return;         }         if (!noRefresh) {             allCount = 0;         }         int pageIndex = allCount/20;         NSString *url;          switch (self.catalog) {             case 1:                 url = [NSString stringWithFormat:@"%@?catalog=%d&pageIndex=%d&pageSize=%d", api_news_list, 1, pageIndex, 20];                 break;             case 2:                 url = [NSString stringWithFormat:@"%@?type=latest&pageIndex=%d&pageSize=%d", api_blog_list, pageIndex, 20];                 break;             case 3:                 url = [NSString stringWithFormat:@"%@?type=recommend&pageIndex=%d&pageSize=%d", api_blog_list, pageIndex, 20];                 break;         }          [[AFOSCClient sharedClient]getPath:url parameters:Nil                         success:^(AFHTTPRequestOperation *operation, id responseObject) {                             [Tool getOSCNotice2:operation.responseString];             isLoading = NO;             if (!noRefresh) {                 [self clear];             }              @try {                 NSMutableArray *newNews = self.catalog <= 1 ?                                  [Tool readStrNewsArray:operation.responseString andOld: news]:                 [Tool readStrUserBlogsArray:operation.responseString andOld: news];                 int count = [Tool isListOver2:operation.responseString];                 allCount += count;                 if (count < 20)                 {                     isLoadOver = YES;                 }                 [news addObjectsFromArray:newNews];                 [self.tableNews reloadData];                 [self doneLoadingTableViewData];                                  //如果是第一頁 則緩存下來                 if (news.count <= 20) {                     [Tool saveCache:5 andID:self.catalog andString:operation.responseString];                 }             }             @catch (NSException *exception) {                 [NdUncaughtExceptionHandler TakeException:exception];             }             @finally {                 [self doneLoadingTableViewData];             }         } failure:^(AFHTTPRequestOperation *operation, NSError *error) {             NSLog(@"新聞列表獲取出錯(cuò)");             //如果是刷新             [self doneLoadingTableViewData];                          if ([Config Instance].isNetworkRunning == NO) {                 return;             }             isLoading = NO;             if ([Config Instance].isNetworkRunning) {                 [Tool ToastNotification:@"錯(cuò)誤 網(wǎng)絡(luò)無連接" andView:self.view andLoading:NO andIsBottom:NO];             }         }];         isLoading = YES;         [self.tableNews reloadData];     }     //如果沒有網(wǎng)絡(luò)連接     else     {         NSString *value = [Tool getCache:5 andID:self.catalog];         if (value) {             NSMutableArray *newNews = [Tool readStrNewsArray:value andOld:news];             [self.tableNews reloadData];             isLoadOver = YES;             [news addObjectsFromArray:newNews];             [self.tableNews reloadData];             [self doneLoadingTableViewData];         }     } }

分析一下這里面的代碼:

首先是做一個(gè)網(wǎng)絡(luò)連接判斷,在開源中國iOS客戶端學(xué)習(xí)——(六)網(wǎng)絡(luò)連接檢測(cè)一文中介紹了,作者并不是用這種方法來判斷,而是使用getPath:parameters:success:failure:來判斷網(wǎng)絡(luò)的連接,方法使用AFHTTPRequestOperation和“PATCH”請(qǐng)求HTTP客戶端操作隊(duì)列,使用到了block塊(iOS 4.0+特性),URL請(qǐng)求成功執(zhí)行success塊里操作,這里面block塊沒有返回值,接受兩個(gè)參數(shù),創(chuàng)建請(qǐng)求操作和響應(yīng)數(shù)據(jù)請(qǐng)求,URL請(qǐng)求失敗執(zhí)行failure里面的方法,這個(gè)block塊里仍沒有返回值,接受兩個(gè)參數(shù)創(chuàng)建請(qǐng)求操作和NSError對(duì)象,描述網(wǎng)絡(luò)或解析錯(cuò)誤狀況;

 if()中的方法[Config Instance].isNetworkRunning==YES的,如果程序加載或者已經(jīng)加載完畢什么也不返回,如果程序沒有加載數(shù)據(jù),將數(shù)據(jù)列表數(shù)量顯示為0,接下來是在switch()中,根據(jù)使用者選擇設(shè)置不同API接口(下圖),然后就是解析顯示數(shù)據(jù)信息,顯示在視圖中;

開源中國iOS客戶端學(xué)習(xí)——(八)網(wǎng)絡(luò)通信AFNetworking類庫  開源中國iOS客戶端學(xué)習(xí)——(八)網(wǎng)絡(luò)通信AFNetworking類庫

在AFNetwork 文件夾中,作者自己添加了一個(gè)AFOSCClient類,該類繼承AFHTTPClient,又設(shè)計(jì)了一個(gè)sharedClient的類方法,從返回的結(jié)果可以推測(cè)出它是通過API請(qǐng)求返回json類型的數(shù)據(jù),具體什么作用還沒看出來;

開源中國iOS客戶端學(xué)習(xí)——(八)網(wǎng)絡(luò)通信AFNetworking類庫

[Tool getOSCNotice2:operation.responseString];是封裝在在Tool類中的解析獲取的XML的文件

URL請(qǐng)求成功,還做了一個(gè)程序異常處理,防止請(qǐng)求數(shù)據(jù)過成功程序異常崩潰

 關(guān)于@try @catch @finally異常處理的使用:

@try
{
//執(zhí)行的代碼,其中可能有異常。一旦發(fā)現(xiàn)異常,則立即跳到catch執(zhí)行。否則不會(huì)執(zhí)行catch里面的內(nèi)容
}
@catch
{
//除非try里面執(zhí)行代碼發(fā)生了異常,否則這里的代碼不會(huì)執(zhí)行
}
@finally
{
//不管什么情況都會(huì)執(zhí)行,包括try catch 里面用了return ,可以理解為只要執(zhí)行了try或者catch,就一定會(huì)執(zhí)行 finally
}


如果URL請(qǐng)求的數(shù)據(jù)出錯(cuò),則反應(yīng)網(wǎng)絡(luò)不連通,數(shù)據(jù)不能加載,則彈出GCDiscreetNotificationView提示視圖  提示網(wǎng)絡(luò)錯(cuò)誤;

postPath:parameters:success:failure:方法在程序中使用舉例:

FriendsView.m

-(void)reload:(BOOL)noRefresh {     if (isLoadOver) {         [self doneLoadingTableViewData];         return;     }          [[AFOSCClient sharedClient] postPath:api_friends_list              parameters:[NSDictionary dictionaryWithObjectsAndKeys:segement.selectedSegmentIndex == 0 ? @"1" : @"0",@"relation",                         [NSString stringWithFormat:@"%d", friends.count/20],@"pageIndex",                         @"20",@"pageSize",                         [NSString stringWithFormat:@"%d", [Config Instance].getUID],@"uid",nil] success:^(AFHTTPRequestOperation *operation, id responseObject) {                                  if (!noRefresh) {                     [self clear];                 }                                  [self doneLoadingTableViewData];                 isLoading = NO;                 NSString *response = operation.responseString;                 [Tool getOSCNotice2:response];                 @try {                                          TBXML *xml = [[TBXML alloc] initWithXMLString:response error:nil];                     TBXMLElement *root = xml.rootXMLElement;                     //顯示                     TBXMLElement *_friends = [TBXML childElementNamed:@"friends" parentElement:root];                     if (!_friends) {                         isLoadOver = YES;                         [self.tableFriends reloadData];                         return;                     }                     TBXMLElement *first = [TBXML childElementNamed:@"friend" parentElement:_friends];                     if (first == nil) {                         [self.tableFriends reloadData];                         isLoadOver = YES;                         return;                     }                     NSMutableArray *newFriends = [[NSMutableArray alloc] initWithCapacity:20];                     TBXMLElement *name = [TBXML childElementNamed:@"name" parentElement:first];                     TBXMLElement *userid = [TBXML childElementNamed:@"userid" parentElement:first];                     TBXMLElement *portrait = [TBXML childElementNamed:@"portrait" parentElement:first];                     TBXMLElement *expertise = [TBXML childElementNamed:@"expertise" parentElement:first];                     TBXMLElement *gender = [TBXML childElementNamed:@"gender" parentElement:first];                     Friend *f = [[Friend alloc] initWithParameters:[TBXML textForElement:name] andUID:[[TBXML textForElement:userid] intValue] andPortrait:[TBXML textForElement:portrait] andExpertise:[TBXML textForElement:expertise] andMale:[[TBXML textForElement:gender] intValue] == 1];                     if (![Tool isRepeatFriend: friends andFriend:f]) {                         [newFriends addObject:f];                     }                    while (first) {                         first = [TBXML nextSiblingNamed:@"friend" searchFromElement:first];                         if (first) {                             name = [TBXML childElementNamed:@"name" parentElement:first];                             userid = [TBXML childElementNamed:@"userid" parentElement:first];                             portrait = [TBXML childElementNamed:@"portrait" parentElement:first];                             expertise = [TBXML childElementNamed:@"expertise" parentElement:first];                             gender = [TBXML childElementNamed:@"gender" parentElement:first];                             f = [[Friend alloc] initWithParameters:[TBXML textForElement:name] andUID:[[TBXML textForElement:userid] intValue] andPortrait:[TBXML textForElement:portrait] andExpertise:[TBXML textForElement:expertise] andMale:[[TBXML textForElement:gender] intValue] == 1];                             if (![Tool isRepeatFriend:friends andFriend:f]) {                                 [newFriends addObject:f];                             }                         }                         else                             break;                     }                     if (newFriends.count < 20) {                         isLoadOver = YES;                     }                                          [friends addObjectsFromArray:newFriends];                     [self.tableFriends reloadData];                                      }                 @catch (NSException *exception) {                     [NdUncaughtExceptionHandler TakeException:exception];                 }                 @finally {                     [self doneLoadingTableViewData];                 }                              } failure:^(AFHTTPRequestOperation *operation, NSError *error) {                                 NSLog(@"好友列表獲取出錯(cuò)");                                  [self doneLoadingTableViewData];                 isLoading = NO;                 if ([Config Instance].isNetworkRunning) {                     [Tool ToastNotification:@"錯(cuò)誤 網(wǎng)絡(luò)無連接" andView:self.view andLoading:NO andIsBottom:NO];                 }                              }];          isLoading = YES;     [self.tableFriends reloadData]; }

這個(gè)方法和getPath:parameters:success:failure:不同的在于請(qǐng)求方式是POST請(qǐng)求,可以向服務(wù)器里提交數(shù)據(jù);



另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。

新聞名稱:開源中國iOS客戶端學(xué)習(xí)——(八)網(wǎng)絡(luò)通信AFNetworking類庫-創(chuàng)新互聯(lián)
網(wǎng)站地址:http://aaarwkj.com/article30/dppdpo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站制作、靜態(tài)網(wǎng)站電子商務(wù)、ChatGPT、建站公司品牌網(wǎng)站設(shè)計(jì)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

亚洲成av人片一区二久久精品| 视频一区视频二区三区| 亚洲一区二区三区经典精品| 亚洲精品av在线网站| 99热只有这里才有精品| 欧美经典三级一区二区三区| 亚洲午夜一区二区三区精品| 欧美一区二区三区蜜桃| 国产伦理在线观看一区二区| 色哟哟精品丝袜一区二区| 国产一区二区三区在线视频播放| 青青草原在线视频观看| 特级艳片在线观看免费| 亚洲国产天堂久久综合| 欧美日韩精品不卡在线播放| 日韩精品中文字幕有码在线| 国产精品一区波多野结衣| 99国产精品热久久婷婷| 久久好大好爽要死了欧美| 香蕉视频欧美久久精品| 国产综合永久精品日韩鬼片| 日本午夜节目在线观看| 日韩一区二区三区视频在线看| 亚洲精品成人一区不卡| 粉嫩av一男战三女高潮| 日韩一区二区高清看片| 日本欧美精品一区二区精选| 国产av午夜精品福利| 午夜在线观看欧美福利| 欧美日韩国产一区二区三区在线观看 | 日本女优中文字幕久久| 另类欧美亚洲中文在线综合 | 亚洲av丰满熟妇在线观看| 在线看片国产精品自拍| 好吊妞视频这里只有精| 国产第一页第二页在线| 热久久这里只有精品网址| 国产又粗又长又大无遮挡| 午夜射精视频在线观看| 亚洲av毛片在线网站| 午夜福利福利一区二区|