2011-09-13 74 views
3

我正在使用TableView控制器從Web提要下載數據,解析並填充此TableView中的內容。 Feed只能提供10個項目的數據塊。因此,例如,當有112個項目加載數據可能需要大約12個請求到服務器。我想在不阻止用戶屏幕的情況下發出這些請求,並且它應該按順序加載數據,就像它不能加載第5頁上的項目,除非它已經提取了前一項(1,2,3,4按照例)。如何在不阻塞UI的情況下將內容加載到TableView中?

關於如何實現這個的任何想法?

THX在您的幫助,

斯特凡

回答

5

利用網絡異步調用。不要在主UI線程上做網絡電話...

例如,如果你正在使用ASIHttp library進行HTTP調用(這是建立在蘋果的NSURLConnection的頂部),使一個異步請求,就是這麼簡單 -

NSURL *url = [NSURL URLWithString:@"http://allseeing-i.com"]; 
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url]; 
[request setDelegate:self]; 
[request startAsynchronous]; 

當數據被取出這些選擇回調被調用 -

- (void)requestFinished:(ASIHTTPRequest *)request 
{ 
    // Use when fetching text data 
    NSString *responseString = [request responseString]; 

    // Use when fetching binary data 
    NSData *responseData = [request responseData]; 
} 

- (void)requestFailed:(ASIHTTPRequest *)request 
{ 
    NSError *error = [request error]; 
} 

這絕對會令你的UI響應...

還要記住僅在主線程上更新UI元素。從後臺線程開始更新ui元素很容易。因此請記住...

+0

瑞恩,當你說只在主線程上更新UI元素時,你的意思是使用performSelectorOnMainThread,對吧? – kris

+0

絕對正確... –

1

您不需要使用其他API並可以使用Apple自己的NSURLConnection。它可以同步或異步檢索數據。當然後者對你來說是必要的。您將數據保存在請求的委託方法中。

– connection:didReceiveResponse: 
– connection:didReceiveData: 
– connection:didFailWithError: 
– connectionDidFinishLoading: 

此外,請參閱我最近對this question更完整的答案。

相關問題