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 是处理一个页面中会出现多次的请求,来区分是处理哪一个数据的。

 
原文地址:https://www.cnblogs.com/lear/p/4024368.html