我正在使用TableView控制器從Web提要下載數據,解析並填充此TableView中的內容。 Feed只能提供10個項目的數據塊。因此,例如,當有112個項目加載數據可能需要大約12個請求到服務器。我想在不阻止用戶屏幕的情況下發出這些請求,並且它應該按順序加載數據,就像它不能加載第5頁上的項目,除非它已經提取了前一項(1,2,3,4按照例)。如何在不阻塞UI的情況下將內容加載到TableView中?
關於如何實現這個的任何想法?
THX在您的幫助,
斯特凡
我正在使用TableView控制器從Web提要下載數據,解析並填充此TableView中的內容。 Feed只能提供10個項目的數據塊。因此,例如,當有112個項目加載數據可能需要大約12個請求到服務器。我想在不阻止用戶屏幕的情況下發出這些請求,並且它應該按順序加載數據,就像它不能加載第5頁上的項目,除非它已經提取了前一項(1,2,3,4按照例)。如何在不阻塞UI的情況下將內容加載到TableView中?
關於如何實現這個的任何想法?
THX在您的幫助,
斯特凡
利用網絡異步調用。不要在主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元素很容易。因此請記住...
您不需要使用其他API並可以使用Apple自己的NSURLConnection
。它可以同步或異步檢索數據。當然後者對你來說是必要的。您將數據保存在請求的委託方法中。
– connection:didReceiveResponse:
– connection:didReceiveData:
– connection:didFailWithError:
– connectionDidFinishLoading:
此外,請參閱我最近對this question更完整的答案。
瑞恩,當你說只在主線程上更新UI元素時,你的意思是使用performSelectorOnMainThread,對吧? – kris
絕對正確... –