2025-04-23

在實際的應用開發過程中,同步請求的用戶體驗並不是很好;我們都知道,Apple是很重視用戶體驗的,這一點也成為瞭行業的標桿,沒有用戶哪裡來的好產品,所以用戶體驗是極其重要的。大笑貌似廢話有點多,接下來進入正題。同步請求不好,那麼就使用異步請求的方法。在開發中,異步請求會使用
NSURLConnetction 類的委托協議 NSURLConnectionDelegate。在請求不同階段會回調委托對象方法,具體方法如下:

connection:didReceiveData: 當請求成功時,這個方法就會開始接收數據,如果數據量很多,它會被多次調用; connection:didFailWithError: 從方法中我們也可以大體知道這個方法的作用,沒錯,就是用來處理當加載數據出現異常的時候調用的; connectionDidFinishLoading:
從方法的命名中也可以知道這個方法是用來當成功完成加載數據時調用的,但在 connection:didReceiveData: 方法之後執行。

PS:記得在.h頭文件中的 @interface 接口中加入委托的申明 哦!

加下來是具體實現的代碼:

 * 開始請求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];    //從服務端接收完整數據後,再把數據發送回表示層的視圖控制器
}

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *