中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

iOS網絡編程-ASIHTTPRequest小例子-數據請求隊列

發布時間:2020-07-11 19:38:02 來源:網絡 閱讀:920 作者:tony關東升 欄目:移動開發

實例:請求隊列

我們通過一個例子介紹一下請求隊列使用,我們設計了一個應用,用戶點擊GO按鈕從服務器同時下載兩張圖片顯示在畫面中。

 iOS網絡編程-ASIHTTPRequest小例子-數據請求隊列

我們直接看看主視圖控制器ViewController.h代碼如下:

 

  1. #import “ASIHTTPRequest.h” 
  2.  
  3. #import “ASINetworkQueue.h” 
  4.  
  5. #import “NSNumber+Message.h” 
  6.  
  7. #import “NSString+URLEncoding.h” 
  8.  
  9.   
  10.  
  11. @interface ViewController : UIViewController 
  12.  
  13.   
  14.  
  15. @property (weak, nonatomic) IBOutlet UIImageView *p_w_picpathView1; 
  16.  
  17. @property (weak, nonatomic) IBOutlet UIImageView *p_w_picpathView2; 
  18.  
  19. @property (strong) ASINetworkQueue  *networkQueue; 
  20.  
  21.   
  22.  
  23. - (IBAction)onClick:(id)sender; 
  24.  
  25. @end 

我 們需要引入ASI框架的兩個頭文件ASIHTTPRequest.h和ASINetworkQueue.h。其中p_w_picpathView1和 p_w_picpathView2是與畫面對應的兩個圖片視圖控件。還定義了ASINetworkQueue  類型的networkQueue屬性。我們直接看看主視圖控制器ViewController.m中點擊GO按鈕調用方法,代碼如下:

 

  1. - (IBAction)onClick:(id)sender { 
  2.  
  3. if (!_networkQueue) { 
  4.  
  5. _networkQueue = [[ASINetworkQueue alloc] init];                       ① 
  6.  
  7.  
  8. // 停止以前的隊列 
  9.  
  10. [_networkQueue cancelAllOperations];                                      ② 
  11.  
  12. // 創建ASI隊列 
  13.  
  14. [_networkQueue setDelegate:self]; 
  15.  
  16. [_networkQueue setRequestDidFinishSelector:@selector(requestFinished:)];      ③ 
  17.  
  18. [_networkQueue setRequestDidFailSelector:@selector(requestFailed:)];          ④ 
  19.  
  20. [_networkQueue setQueueDidFinishSelector:@selector(queueFinished:)];          ⑤ 
  21.  
  22.   
  23.  
  24. for (int i=1; i<3; i++) { 
  25.  
  26. NSString *strURL = [[NSString alloc] initWithFormat: 
  27.  
  28. @”http://iosbook3/download.php?email=%@&FileName=test%i.jpg”, 
  29.  
  30. @”<你的iosbook1.com用戶郵箱>”,i]; 
  31.  
  32. NSURL *url = [NSURL URLWithString:[strURL URLEncodedString]]; 
  33.  
  34. ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url]; 
  35.  
  36. request.tag = i;                                                  ⑥ 
  37.  
  38. [_networkQueue addOperation:request];                                   ⑦ 
  39.  
  40.  
  41. [_networkQueue go];                                                   ⑧ 
  42.  

我們再看看它們的回調方法,代碼:

 

  1. - (void)requestFinished:(ASIHTTPRequest *)request 
  2.  
  3.  
  4. NSData *data = [request responseData]; 
  5.  
  6. NSError *eror; 
  7.  
  8. NSDictionary *resDict = [NSJSONSerialization JSONObjectWithData:data 
  9.  
  10. options:NSJSONReadingAllowFragments error:&eror]; 
  11.  
  12. if (!resDict) { 
  13.  
  14. UIImage *img = [UIImage p_w_picpathWithData:data]; 
  15.  
  16. if (request.tag ==1) {                                                ① 
  17.  
  18. _p_w_picpathView1.p_w_picpath = img; 
  19.  
  20. else { 
  21.  
  22. _p_w_picpathView2.p_w_picpath = img; 
  23.  
  24.  
  25. else { 
  26.  
  27. NSNumber *resultCodeObj = [resDict objectForKey:@"ResultCode"]; 
  28.  
  29. NSString *errorStr = [resultCodeObj errorMessage]; 
  30.  
  31. UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@”錯誤信息” 
  32.  
  33. message:errorStr 
  34.  
  35. delegate:nil 
  36.  
  37. cancelButtonTitle:@”OK” 
  38.  
  39. otherButtonTitles: nil]; 
  40.  
  41. [alertView show]; 
  42.  
  43.  
  44. if ([_networkQueue requestsCount] == 0) {                                    ② 
  45.  
  46. [self setNetworkQueue:nil]; 
  47.  
  48.  
  49. NSLog(@”請求成功”); 
  50.  
  51.  
  52. - (void)requestFailed:(ASIHTTPRequest *)request                              ③ 
  53.  
  54.  
  55. NSError *error = [request error]; 
  56.  
  57. NSLog(@”%@”,[error localizedDescription]); 
  58.  
  59. if ([_networkQueue requestsCount] == 0) { 
  60.  
  61. [self setNetworkQueue:nil]; 
  62.  
  63.  
  64. NSLog(@”請求失敗”); 
  65.  
  66.  
  67. - (void)queueFinished:(ASIHTTPRequest *)request                              ④ 
  68.  
  69.  
  70. if ([_networkQueue requestsCount] == 0) { 
  71.  
  72. [self setNetworkQueue:nil]; 
  73.  
  74.  
  75. NSLog(@”隊列完成”); 
  76.  

requestFinished: 方法是請求對象成功回調方法,因此有兩個請求對象它會被調用兩次,在第①行代碼中我們根據GO按鈕點擊事件設定的 請求對象的tag屬性,來判斷是哪個請求對象的回調。進而加載到顯示不同的圖片視圖。第②代碼[_networkQueue requestsCount]可以判斷隊列中請求對象的個數。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

沈阳市| 周口市| 天全县| 罗源县| 伊川县| 辽宁省| 渭南市| 喜德县| 兰西县| 绥德县| 天峨县| 乐昌市| 望谟县| 同江市| 濮阳县| 绥德县| 花莲市| 隆林| 平陆县| 泰州市| 历史| 延庆县| 天气| 佛坪县| 仪陇县| 昌宁县| 西乌珠穆沁旗| 岑溪市| 金溪县| 呼伦贝尔市| 吴江市| 娄底市| 阳信县| 阿荣旗| 武宣县| 彩票| 精河县| 太仓市| 耒阳市| 额敏县| 文安县|