2012-11-17 2 views
0

첫 번째 앱을 작성 중이며 웹 사이트의 데이터를 파싱합니다. 사용자의 검색에 따라 데이터가 tableview에 표시되기까지 최대 30 초가 소요될 수있는 1000 개의 노드를 구문 분석해야 할 수 있습니다. 처음 30 개 노드를 파싱하고 사용자가 테이블 뷰를 부분적으로 스크롤 할 때까지 다음 30 개를 표시하지 않는 일반적인 전략은 무엇입니까? 이 웹 사이트 (here)를 예제로 사용했지만 한 번에 30 개의 노드를로드 할 수 있도록 구문 분석 방법을 어디에 두어야하는지 이해하기가 힘듭니다.데이터 섹션을 구문 분석하여 로딩 시간을 줄입니다.

#import "DataLoader.h" 

@implementation DataLoader 

@synthesize delegate; 

- (void)loadData 
{ 
[self performSelector:@selector(loadDataDelayed) withObject:nil afterDelay:3]; 
} 

- (void)loadDataDelayed 
{ 

[parsing method here] 
NSMutableArray *array = [NSMutableArray arrayWithCapacity:30]; 
for (int i = 1; i<=30 ; i++) { 
    [array addObject:[propertyList objectAtIndex:i]; 
} 
[delegate.searchResultOfSets addObjectsFromArray:array]; 
[delegate.tableView reloadData]; 
// Always remember to set loading to NO whenever you finish loading the data. 
delegate.loading = NO; 
} 
@end 

그러나 이것은 분명히 모든 데이터를 먼저 구문 분석합니다. 내 구문 분석을 최적화하는 방법에 대한 아이디어가 있습니까?

답변

0

처음 30 개 항목 만 가져온 다음 사용자가 아래로 스크롤하여 다시 30 개 항목을 다시 다운로드하면 다음과 같이 표시 될 수 있습니다.

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath { 
     if(indexPath.row == [self.arrayOfItems count] && hasMoreItemsToLoad) 
      [self loadNext30Items]; 
} 
+0

감사합니다. 프로그래밍에 익숙하지 않아 세그먼트로 파싱하는 방법을 모르겠습니다. 30 개 항목 후에 구문 분석을 중지 한 다음 구문 분석이 중단 된 부분을 다시 가져 오는 방법은 무엇입니까? – badger0053

관련 문제