标签:
第一步:遵守协议NSURLConnectionDataDelegate
第二步:创建包含请求网址的NSURL类型的对象
NSURL * url = [NSURL URLWithString:PATH];
第三步:创建NSURLRequest请求
NSURLRequest * request = [NSURLRequest requestWithURL:url];
第四步:将request对象赋给NSURLCon对象开始异步请求
[NSURLConnection connectionWithRequest:request delegate:self];
异步请求代理中3个重要的协议方法
//<1>接收服务器的响应 -(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response { NSLog(@"接收服务器的响应"); //-----------------拓展 //判断当前服务器的响应状态 /* 1 200表示数据请求成功 2 404表示请求的数据不存在 3 400 表示客户端请求的语法发生错误 4 500 服务器端语法发生错误 */ //NSURLResponse 所有响应对象的父类 其实两个设备之间通信一定要遵守http协议 所以这里的响应对象为NSHTTPURLRequest NSHTTPURLResponse * httpRequest = (NSHTTPURLResponse *)response; NSInteger status = [httpRequest statusCode]; NSLog(@"%d",status);//验证什么原因没有请求到数据 myData.length = 0;//在数据请求下来之前将mydata进行清空,防止对后面的内容造成影响 }
//NSURLConnection只能用单任务请求,不能进行多任务异步请求。另外两个可以用多任务 //多个线程并行工作请求数据请求下来的数据都不完整,只能多个线程请求的数据放在一起才算一个完整的数据,所以在这需要将各个data拼接。这也是为什么要声明一个NSMutableData的原因,从服务器中请求下来的数据都是NSdata类型的,用来承载所有线程请求的数据 -(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { NSLog(@"接收请求数据"); //该方法会被事实调用,直到所有数据请求结束 [myData appendData:data];//将每个线程请求下来的数据进行拼接 }
//数据解析 -(void)connectionDidFinishLoading:(NSURLConnection *)connection { NSLog(@"数据请求结束"); //数据解析,解析以后将数据加到UI上 NSDictionary * dic = [NSJSONSerialization JSONObjectWithData:myData options:NSJSONReadingMutableContainers error:nil]; NSArray * array = [dic objectForKey:@"users"]; [_dataSourse addObjectsFromArray:array]; [self.tableView reloadData]; }
标签:
原文地址:http://www.cnblogs.com/huoxingdeguoguo/p/4600876.html