ios接收数据的两种方式 一种是ASI 另一种是系统自带的类

ASI  使用ASIHttpRequest第三方开源库进行信息的下载

导入ASIHttpRequest源码

 //创建一个ASI对象

    ASIHTTPRequest *request =[ASIHTTPRequestrequestWithURL:url];

    //设置代理

    request.delegate = self;

    //不同request可以通过tag值进行标记

    request.tag = 100;

    //request执行异步请求数据,默认请求方式为get请求

    [request startAsynchronous];

    //[request startSynchronous];(同步请求)

 

#pragma mark - ASI Delegate

//当数据下载完成时,调用此方法

- (void)requestFinished:(ASIHTTPRequest *)request;根据request.responseData来获取数据

//数据下载失败或者没有网络、请求数据超时的时候,调此方法

- (void)requestFailed:(ASIHTTPRequest *)request

 

利用系统函数NSURLConnection来接受数据

 //用请求的url生成一个请求,请求对象带有请求信息,客户端会将request带给服务端

    NSURLRequest *request = [NSURLRequest requestWithURL:url];

//主线程显示UI和子线程请求数据同时进行,在connectionDidFininshLoading方法调用后,将请求的数据自动调给主线程

    _urlConnection = [[NSURLConnectionalloc] initWithRequest:request delegate:self];

#pragma mark - conntectionDataDelegate

//当客户端收到服务端对请求的回应时,调用此方法

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{//NSURLResponse 服务端网络请求回应的基类

    //http协议下的回应应该为NSHTTPURLResponse

    NSHTTPURLResponse *http = (NSHTTPURLResponse *)response;

    //带有服务端回应的状态码(200 代表成功,服务端能满足客户端请求;404 客户端请求的资源服务端没有找到;400 客户端请求的语法错误;500服务器错误)

     NSInteger status =[http statusCode];

    NSLog(@"status:%d",status);

    //清空旧数据

    [_downloadDatasetLength:0];

}

//当服务端发送数据的时候,调用此方法,用于接收数据

//如果数据量较大,此方法可能会被执行多次

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{

    //将服务端发送过的数据拼接到_downloadData

    [_downloadData appendData:data];

}

//当客户端接收数据完毕后,调用此方法

- (void)connectionDidFinishLoading:(NSURLConnection *)connection{

    if (_downloadData) {

        //对数据进行后续操作

      id result=[NSJSONSerializationJSONObjectWithData:_downloadDataoptions:NSJSONReadingMutableContainerserror:nil];

        if ([result isKindOfClass:[NSDictionary class]]) {

            NSDictionary *dic = (NSDictionary *)result;

            NSLog(@"dic:%@",dic);

            NSArray *array = [dic objectForKey:@"users"];

            [_dataArray addObjectsFromArray:array];

        }

        //刷新视图,让tableView利用带有数据的_dataArray进行显示

        [self.tableView reloadData];

    }

//可以不用json解析数据  之后会对数据的解析做一个详细的介绍

}

 由此可见 第三方asi的方法相对的轻松一些

posted on 2014-03-15 17:10  chenhanqing_blcu  阅读(613)  评论(0编辑  收藏  举报