2012-04-10 5 views
4

UITableView에서 일종의 지연로드를 구현해야합니다. dataForCellAtIndexPath 방법은 느리기 때문에UITableView 게으른 로딩 셀 데이터

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    //... some initializations here 

    //this is a function that pulls my cell data using helper class 
    NSData *cellData=[MyDataClass dataForCellAtIndexPath:indexpath.row]; 

    //... here I populate pulled data to cell 

    return cell; 
} 

다하지 원활하게 큰, 하지만 테이블 뷰 스크롤을 사용할 수 있습니다. 그래서이 메소드를 호출하여 게으른 데이터를 셀에 구현해야합니다. 내가 기대하는 결과는 테이블 뷰가 부드럽게 스크롤되지만 셀이 그려진 후 셀의 내용이 조금 채워지는 것입니다. 도와주세요, 어떻게 할 수 있습니까?

답변

3

예, 데이터 수집을 백그라운드 스레드로 푸시 할 수 있습니다.

[MyDataClass performSelectorInBackground:@selector(dataForCellAtIndexPath:) withObject:indexpath.row]; 

postGrand Central DispatchNSThread 같은 다른 더 복잡한 사용자 정의 옵션의 일부를 언급 : 시도하는 첫 번째 점은 아무것도 개선되는지 확인하는 가장 간단한 방법입니다.

+0

개선 될 내용은 무엇인가요? 세포를 그려야 할 필요가 있다면 즉시 그려야합니다. 따라서 모든 밟기에서 느린 방법을 호출하면 아무런 결과도 얻지 못할 것입니다. 그러나 참고 문헌에 대한 감사합니다. – Oleg

+0

@Oleg 세포가 즉시 그려지고 그 내용이 나중에 채워질 수 있습니다. – GregularExpressions

+0

흠 .. 흥미 롭다. 나는 지금 그것을 시도 할 것이다. – Oleg

2

많은 양의 데이터를 사용하는 경우 Core-data에 저장하고 NSFetchedResultsController을 사용하여 tableView를 채우는 것이 좋습니다.

&은 주로 tableView를 빠르게 채우고 고성능으로 만들기 위해 tableView와 연결됩니다.

여기에 문서 링크가 NSFetchedResultsController입니다!

+0

지금, 나는 coredata를 사용하지 않고있다. 그래서'NSFetchResultsController'는 쓸모가 없습니다. – Oleg

+0

데이터 소스의 크기는 얼마나됩니까? – Legolas

+0

꽤 큽니다. – Oleg

-1

그것을 위해 u는 테이블 셀의 인덱스 값에 기초하여 새로운 데이터를로드 할 수 있습니다

당신은 셀의 현재에 의해 검토되는에 의존하기 때문에로드 할 얼마나 많은 새로운 데이터에 대한 조건을 넣을 수 있습니다 사용자.