在实际的应用开发过程中,同步请求的用户体验并非非常好;我们都知道。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:
@"请求server地址"]; 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不断接收server端返回的数据
} -(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>