温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

iOS网络编程-ASIHTTPRequest小例子-数据请求队列

发布时间:2020-07-11 19:38:02 阅读:936 作者:tony关东升 栏目:移动开发
开发者测试专用服务器限时活动,0元免费领,库存有限,领完即止! 点击查看>>

实例:请求队列

我们通过一个例子介绍一下请求队列使用,我们设计了一个应用,用户点击GO按钮从服务器同时下载两张图片显示在画面中。

 iOS网络编程-ASIHTTPRequest小例子-数据请求队列

我们直接看看主视图控制器ViewController.h代码如下:

#import “ASIHTTPRequest.h”  #import “ASINetworkQueue.h”  #import “NSNumber+Message.h”  #import “NSString+URLEncoding.h”     @interface ViewController : UIViewController     @property (weak, nonatomic) IBOutlet UIImageView *p_w_picpathView1;  @property (weak, nonatomic) IBOutlet UIImageView *p_w_picpathView2;  @property (strong) ASINetworkQueue  *networkQueue;     - (IBAction)onClick:(id)sender;  @end 

我 们需要引入ASI框架的两个头文件ASIHTTPRequest.h和ASINetworkQueue.h。其中p_w_picpathView1和 p_w_picpathView2是与画面对应的两个图片视图控件。还定义了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:  @”http://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 p_w_picpathWithData:data];  if (request.tag ==1) {                                                ①  _p_w_picpathView1.p_w_picpath = img;  } else {  _p_w_picpathView2.p_w_picpath = 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]可以判断队列中请求对象的个数。

亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI

开发者交流群×