iOS網絡編程-ASIHTTPRequest小例子-數據請求隊列
實例:請求隊列
我們通過一個例子介紹一下請求隊列使用,我們設計了一個應用,用戶點擊GO按鈕從服務器同時下載兩張圖片顯示在畫麵中。
我們直接看看主視圖控製器ViewController.h代碼如下:
#import “ASIHTTPRequest.h” #import “ASINetworkQueue.h” #import “NSNumber+Message.h” #import “NSString+URLEncoding.h” @interface ViewController : UIViewController @property (weak, nonatomic) IBOutlet UIImageView *imageView1; @property (weak, nonatomic) IBOutlet UIImageView *imageView2; @property (strong) ASINetworkQueue *networkQueue; - (IBAction)onClick:(id)sender; @end
我們需要引入ASI框架的兩個頭文件ASIHTTPRequest.h和ASINetworkQueue.h。其中imageView1和 imageView2是與畫麵對應的兩個圖片視圖控件。還定義了ASINetworkQueue 類型的networkQueue屬性。我們直接看看主視圖控製器ViewController.m中點擊GO按鈕調用方法,代碼如下:
- (IBAction)onClick:(id)sender { if (!_networkQueue) { _networkQueue = [[ASINetworkQueue alloc] init]; ① } // 停止以前的隊列 [_networkQueue cancelAllOperations]; ② // 創建ASI隊列 [_networkQueue setDelegate:self]; [_networkQueue setRequestDidFinishSelector:@selector(requestFinished:)]; ③ [_networkQueue setRequestDidFailSelector:@selector(requestFailed:)]; ④ [_networkQueue setQueueDidFinishSelector:@selector(queueFinished:)]; ⑤ for (int i=1; i<3; i++) { NSString *strURL = [[NSString alloc] initWithFormat: @”https://iosbook3/download.php?email=%@&FileName=test%i.jpg”, @”<你的iosbook1.com用戶郵箱>”,i]; NSURL *url = [NSURL URLWithString:[strURL URLEncodedString]]; ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url]; request.tag = i; ⑥ [_networkQueue addOperation:request]; ⑦ } [_networkQueue go]; ⑧ }
我們再看看它們的回調方法,代碼:
- (void)requestFinished:(ASIHTTPRequest *)request { NSData *data = [request responseData]; NSError *eror; NSDictionary *resDict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:&eror]; if (!resDict) { UIImage *img = [UIImage imageWithData:data]; if (request.tag ==1) { ① _imageView1.image = img; } else { _imageView2.image = img; } } else { NSNumber *resultCodeObj = [resDict objectForKey:@"ResultCode"]; NSString *errorStr = [resultCodeObj errorMessage]; UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@”錯誤信息” message:errorStr delegate:nil cancelButtonTitle:@”OK” otherButtonTitles: nil]; [alertView show]; } if ([_networkQueue requestsCount] == 0) { ② [self setNetworkQueue:nil]; } NSLog(@”請求成功”); } - (void)requestFailed:(ASIHTTPRequest *)request ③ { NSError *error = [request error]; NSLog(@”%@”,[error localizedDescription]); if ([_networkQueue requestsCount] == 0) { [self setNetworkQueue:nil]; } NSLog(@”請求失敗”); } - (void)queueFinished:(ASIHTTPRequest *)request ④ { if ([_networkQueue requestsCount] == 0) { [self setNetworkQueue:nil]; } NSLog(@”隊列完成”); }
requestFinished:方法是請求對象成功回調方法,因此有兩個請求對象它會被調用兩次,在第①行代碼中我們根據GO按鈕點擊事件設定的 請求對象的tag屬性,來判斷是哪個請求對象的回調。進而加載到顯示不同的圖片視圖。第②代碼[_networkQueue requestsCount]可以判斷隊列中請求對象的個數。
最後更新:2017-04-03 20:51:31