ASIHttpRequest addRequestHeader的处理
我现在用到了ASIHttpRequest来读取数据,这时候我发现里面的头在很多时候都是一样的。如用户的令牌,设备类型,ios版本,软件版本等
[self.request addRequestHeader:@"Authorization" value:[SaveData getStringFromSetting:@"Ticket"]]; [self.request addRequestHeader:@"DeviceType" value:[StaticData getDeviceType]]; [self.request addRequestHeader:@"SystemVersion" value:[StaticData getSystemVersion]]; [self.request addRequestHeader:@"LocalVersion" value:[StaticData getLocalVersion]];
如果在每一个访问网络的地方都加这一个,这样重复性就很大,所以需要抽出来。
我的想法是在父类中放一个方法,把我们需要访问的网址给这个方法就可以了,所以我在父类中写了一个读取的方法。
-(void)readNetworkDataWithUrl:(NSString *)url number :(int)number { [HUD show:YES];//显示加载中状态 url = [NSString stringWithFormat:@"%@%@",[StaticData getUrlDomain],url]; //访问的地址 NSURL *_url = [NSURL URLWithString:url]; //访问 self.request = [ASIHTTPRequest requestWithURL:_url]; //超时时间多少秒 [self.request setTimeOutSeconds:120]; //访问失败重新访问次数 [self.request setNumberOfTimesToRetryOnTimeout:2]; //是否使用持久化连接 [self.request setShouldAttemptPersistentConnection:NO]; [self.request addRequestHeader:@"Authorization" value:[SaveData getStringFromSetting:@"Ticket"]]; [self.request addRequestHeader:@"DeviceType" value:[StaticData getDeviceType]]; [self.request addRequestHeader:@"SystemVersion" value:[StaticData getSystemVersion]]; [self.request addRequestHeader:@"LocalVersion" value:[StaticData getLocalVersion]]; //获取数据成功执行的方法 [self.request setCompletionBlock:^(void) { [HUD hide:YES];//隐藏加载中状态 NSString *jsonString = [self.request responseString]; [self.delegate1 viewBaseReadDataSuccessWith:jsonString number:number]; }]; //获取数据失败执行的方法 [self.request setFailedBlock:^(void){ [HUD hide:YES];//隐藏加载中状态 if([self.delegate1 respondsToSelector:@selector(viewBaseReadDataFailed:)]){ [self.delegate1 viewBaseReadDataFailed:number]; } }]; [self.request setDelegate:self]; [self.request startAsynchronous]; }
本来我是想把读到的值直接作返回值返出去,可是好象是异步处理的,返不出去。我就只能想办法通过Delegate接口来把值传出去了。
就是其中的
[self.delegate1 viewBaseReadDataSuccessWith:jsonString number:number];
[self.delegate1 viewBaseReadDataFailed:number];
现在我就通过继承父类的接口来实现数据的处理。
实现方法如下:
#pragma mark - #pragma mark ViewBaseForConnectNetwork Delegate -(void)viewBaseReadDataSuccessWith:(NSString *)jsonString number:(int)nunmber { NSMutableDictionary *tempDictionary = [jsonString JSONValue]; bool result = [[tempDictionary objectForKey:@"Result"] intValue]; if (result) { NSLog(@"in true"); NSString *ticket = [[tempDictionary objectForKey:@"Content"] objectForKey:@"Ticket"]; NSLog(@"%@",ticket); }else{ NSLog(@"in false"); NSString *message = [tempDictionary objectForKey:@"Message"]; NSLog(@"%@",message); } LoginSuccessViewController *newView = [[LoginSuccessViewController alloc]init]; newView.title = @"登录成功"; newView.hidesBottomBarWhenPushed = YES; [self.navigationController pushViewController:newView animated:YES]; } -(void)viewBaseReadDataFailed:(int)number{ NSLog(@"出错执行的方法"); }
这样就实现了我把公用的头放到父类中的功能。
其中的 (int)nunmber 是处理一个页面中会出现多次的请求,来区分是处理哪一个数据的。