NSConnection_异步下载_代理
NSURLConnection的Delegate回调函数
接收到服务器的响应
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response;
接收到服务器发送过来的数据,数据是分段发给我们的,所以这个方法会被调用多次
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data;
服务器所有的数据都发送完成之后,会调用这个方法
- (void)connectionDidFinishLoading:(NSURLConnection *)connection;
请求失败(url不合法、超时、网络中断等等)时会调用这个方法
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error;
1 //字符串地址 2 NSString *path=@"http://10.0.8.8/sns/my/user_list.php"; 3 4 //转网址 5 NSURL *url=[NSURL URLWithString:path]; 6 7 //请求类 创建请求对象 8 NSURLRequest *request=[NSURLRequest requestWithURL:url]; 9 10 11 //设置代理 发送异步请求 代理方法 12 self.connection=[NSURLConnection connectionWithRequest:request delegate:self];17 18 } 19 20 21 //建立连接 完成了请求 接收响应 22 -(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{ 23 24 NSLog(@"收到服务器响应,即将建立链接,下载数据"); 25 if ([response isKindOfClass:[NSHTTPURLResponse class]] == YES) { 26 //如果协议是http响应,证明响应是正确的,打印响应的状态 27 NSHTTPURLResponse * httpresponse = (id)response; 28 // NSHTTPURLResponse继承自NSURLResponse 29 NSLog(@"%ld", (long)httpresponse.statusCode); 30 //200成功 404 是错误,没有响应。 31 } 32 33 //收到响应之后,connection会自然的建立链接,下载数据。 34 35 //清空_data 36 if (_mdata==nil) { 37 _mdata=[[NSMutableData alloc]init]; 38 } 39 _mdata.length = 0; 40 41 } 42 43 - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data 44 { 45 NSLog(@"收到数据"); 46 //如果数据比较大,这个函数会反复调用,每次获取部分数据,数据就是参数data 47 48 //将每次下载到的数据,拼接到_data中 49 [_mdata appendData:data]; 50 } 51 52 - (void)connectionDidFinishLoading:(NSURLConnection *)connection 53 { 54 NSLog(@"数据接收完毕"); 55 56 NSLog(@"%s", _mdata.bytes); 57 //解析 58 if (_mdata) { 59 60 id obj=[NSJSONSerialization JSONObjectWithData:_mdata options:NSJSONReadingMutableContainers error:nil]; 61 62 NSLog(@"%@",obj); 63 } 64 65 } 66 67 - (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error 68 { 69 NSLog(@"下载发生错误 %@", error); 70 }