美文网首页
#网络数据解析

#网络数据解析

作者: YuWenHaiBo | 来源:发表于2016-05-14 16:38 被阅读84次

    首先我们准备一些准备工作新建一个singleView工程,然后如图所示


    heiyu.png heiyu.png

    如图所示,我们新建一个名字叫URL的headFile文件,方便以后调用接口

    关于网络数据解析iOS9.0之后已经弃用NSConnection不过还是能用,不过推荐使用NSSession.
    由于代理比较麻烦,所以这里只整理block

    NSURLConnection解析

    // #pragma mark - post同步请求
    
     //1.创建url
     NSURL *url = [NSURL URLWithString:POST_URL];
         
     
     //2.创建网络请求 [post请求必须初始化为可变请求,因为稍后要进行一些内容的设置]
     NSMutableURLRequest *mutableRequest = [NSMutableURLRequest requestWithURL:url];
     
     //2.5设置body
     //创建一个连接字符串(这个内容在以后的开发中接口文档都有标注)
     NSString *dataString = POST_BODY;
     
     //对连接字符串进行编码【这一步千万不能忘记】
     NSData *postData = [dataString `dataUsingEncoding:NSUTF8StringEncoding];
     
     //设置请求格式为POST请求  [在这个地方后边POST必须全大写]
     [mutableRequest setHTTPMethod:@"POST"];
     
     //设置请求体(body)
     [mutableRequest setHTTPBody:postData];
     
     
     //3.连接服务器
     NSData *data = [NSURLConnection sendSynchronousRequest:mutableRequest returningResponse:nil error:nil];
     
     //4.进行json数据解析
     NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil];
     
     NSLog(@"dic = %@",dic);
    
    // #pragma mark - get同步请求
     // 1.创建URL
    NSURL *url = [NSURL URLWithString:GET_URL];
    // 2.创建网络请求
    NSURLRequest *request = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:20];
    // 3.连接服务器
    NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
    // 4.解析数据
    NSDictionary *resultDic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil];
    NSLog(@"dic = %@",resultDic);
    
    // #pragma mark - post异步请求(block)
     //1.创建url
        NSURL *url = [NSURL URLWithString:POST_URL];
    // 2.创建网络请求
        NSMutableURLRequest *mRequest= [NSMutableURLRequest requestWithURL:url];
        
    //2.5创建body
        NSString *string = POST_BODY;
        NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding];
        [mRequest setHTTPMethod:@"POST"];
        [mRequest setHTTPBody:data];
    //3.链接服务器
        [NSURLConnection sendAsynchronousRequest:mRequest queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) {
            if (connectionError == nil) {
                
    //4.数据解析
        NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil];
                NSLog(@"%@", dict);
            }
        }];
    
    
    // #pragma mark - get异步请求(block)
    //1.创建url
    NSURL *url = [NSURL URLWithString:GET_URL];
        
    //2.创建请求
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
        
    //3.链接服务器
        //方法一:Block方法实现
        //第一个参数:请求对象
        //第二个参数:线程队列
    [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) {
            //response是携带的接口信息
            //data请求下来的数据,接下来会使用到的
            //connectionError错误信息
            if (connectionError == nil) {
    //4.解析
    NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil];        
                NSLog(@"dic = %@",dic);     
                //先开辟子线程解析数据
                //然后在主线程里刷新UI
            }
        }];
    

    NSURLSession解析

    // #pragma mark - get同步请求
    //1.创建url
        NSURL *url = [NSURL URLWithString:GET_URL];
    //2.创建session对象
        NSURLSession *session = [NSURLSession sharedSession];
    //3.创建task请求任务
        //NSURLSession是基于任务去完成相关的事件的
        //NSURLSessionTask所有的任务均放在这个里边实现
        NSURLSessionTask *task = [session dataTaskWithURL:url completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
    //4.解析相关的数据
            if (error == nil) {
                NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil];
                NSLog(@"dic = %@",dic);
            }   
        }]; 
    //5.核心步:启动任务【千万不能忘记】
    //原因:NSURLSessionTask实例出来的任务处于挂起状态,如果不启动,不会走block中的实现内容
        [task resume]; 
    
    
    // #pragma mark - post异步请求
        //1.创建url
        NSURL *url = [NSURL URLWithString:POST_URL];
        
        //2.创建请求
        NSMutableURLRequest *mutableRequest = [NSMutableURLRequest requestWithURL:url];
        
        //2.5核心设置body
        NSString *bodyString = POST_BODY;
        
        NSData *postData = [bodyString dataUsingEncoding:NSUTF8StringEncoding];
        
        [mutableRequest setHTTPMethod:@"POST"];
        [mutableRequest setHTTPBody:postData];
        
        //3.创建session对象
        NSURLSession *session = [NSURLSession sharedSession];
        
        //4.创建task
        NSURLSessionTask *task = [session dataTaskWithRequest:mutableRequest completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
            
            //5.解析
            if (error == nil) {
                NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil];
                
                NSLog(@"dic = %@",dic);
            }
            
        }];
        
        //6.启动任务
        [task resume];
    
    

    相关文章

      网友评论

          本文标题:#网络数据解析

          本文链接:https://www.haomeiwen.com/subject/eonmrttx.html