2011-09-13 4 views
3

저는 컨트롤러가 웹 피드에서 데이터를 다운로드하고,이 TableView에서 내용을 파싱하고 채우는 TableView를 만들고 있습니다. 피드는 10 개 항목의 청크로만 데이터를 제공합니다. 예를 들어 112 개의 항목이있을 때 데이터를로드하는 경우 서버에 약 12 ​​개의 요청이 필요할 수 있습니다. 사용자 화면을 차단하지 않고 이러한 요청을하고 싶습니다. 데이터를로드해야합니다 (예 : 이전 순서대로 1,2,3,4를 가져온 경우가 아니면 5 페이지의 항목을로드 할 수 없습니다. 예).UI를 차단하지 않고 TableView에 내용을로드하는 방법은 무엇입니까?

구현 방법에 대한 의견이 있으십니까? 당신의 도움에 미리

들으,

스테판

답변

5

는 웹 비동기 호출합니다.

- 당신은 비동기 요청으로 간단하고, (이것은 애플의 NSURLConnection의 상단에 내장되어 있습니다) HTTP 통화를 할 ASIHttp library를 사용하는 경우 ... 메인 UI 스레드에서 예를 들어

을 웹 호출을하지 말라

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

Ryan, 메인 스레드에서만 UI 요소를 업데이트한다고하면 performSelectorOnMainThread를 사용 하시겠습니까? – kris

+0

절대적으로 ... –

1

다른 API를 사용할 필요가없고 Apple 자신의 NSURLConnection을 사용할 수 있습니다. 데이터를 동 기적 또는 비동기 적으로 검색 할 수 있습니다. 물론 후자가 필요합니다. 요청의 대리자 메서드에 데이터를 저장합니다.

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

또한 최근 this question에 대한보다 완전한 대답을 참조하십시오.

관련 문제