iOS 中客户端和服务器的 Web Service 网络通信 (2)

jopen 8年前

       在实际的应用开发过程中,同步请求的用户体验并不是很好;我们都知道,Apple是很重视用户体验的,这一点也成为了行业的标杆,没有用户哪里来的好产品,所以用户体验是极其重要的。大笑貌似废话有点多,接下来进入正题。同步请求不好,那么就使用异步请求的方法。在开发中,异步请求会使用 NSURLConnetction 类的委托协议 NSURLConnectionDelegate。在请求不同阶段会回调委托对象方法,具体方法如下:

     connection:didReceiveData: 当请求成功时,这个方法就会开始接收数据,如果数据量很多,它会被多次调用; connection:didFailWithError: 从方法中我们也可以大体知道这个方法的作用,没错,就是用来处理当加载数据出现异常的时候调用的; connectionDidFinishLoading: 从方法的命名中也可以知道这个方法是用来当成功完成加载数据时调用的,但在 connection:didReceiveData: 方法之后执行。

     PS:记得在.h头文件中的 @interface 接口中加入委托的申明<NSURLConnectionDelegate> 哦!

     加下来是具体实现的代码:

<span style="font-size:32px;"> * 开始请求Web Service   */  -(void)startRequest  {                NSString *strURL = [[NSString alloc] initWithFormat:                          @"请求服务器地址"];         NSURL *url = [NSURL URLWithString:[strURL URLEncodedString]];         NSURLRequest *request = [[NSURLRequest alloc] initWithURL:url];      NSURLConnection *connection = [[NSURLConnection alloc]                                     initWithRequest:request                                     delegate:self];            if (connection) {          self.datas = [NSMutableData new];      }        }      #pragma mark- NSURLConnection method  - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {      [self.datas appendData:data];   //利用NSMutalbeArray数组datas不断接收服务器端返回的数据  }      -(void) connection:(NSURLConnection *)connection didFailWithError: (NSError *)error {            NSLog(@"%@",[error localizedDescription]);  }  //当connection:didReceiveData:方法成功接收数据后回调这个方法  - (void) connectionDidFinishLoading: (NSURLConnection*) connection {      NSLog(@"请求完成...");      NSDictionary* dict = [NSJSONSerialization JSONObjectWithData:_datas options:NSJSONReadingAllowFragments error:nil];      [self reloadView:dict];    //从服务端接收完整数据后,再把数据发送回表示层的视图控制器  }</span>

    



来自: http://blog.csdn.net//w_x_p/article/details/40055379