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 是处理一个页面中会出现多次的请求,来区分是处理哪一个数据的。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
2011-10-14 js屏蔽F5 兼容ie和firefox