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

     
  • 相关阅读:
    Cypher 语句实战
    springboot2.0-统一处理返回结果和异常情况
    IM系统的MQ消息中间件选型:Kafka还是RabbitMQ?
    Dripicons – 精美的扁平风格的免费矢量图标字体
    实用手册:130+ 提高开发效率的 vim 常用命令
    RulersGuides.js – 网站中实现 Photoshop 标尺效果
    分享27款最佳的复古风格 WordPress 主题
    Web 开发人员必备的12款 Chrome 扩展程序
    酷站欣赏:20个精美的国外扁平化网页设计作品
    编码神器——Sublime Text 包管理工具及扩展大全
  • 原文地址:https://www.cnblogs.com/lear/p/4024368.html
Copyright © 2020-2023  润新知