iOS 中客戶端和服務器的 Web Service 網絡通信 (2)
在實際的應用開發過程中,同步請求的用戶體驗并不是很好;我們都知道,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>
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!