2012-01-18 3 views
0

sqlite 테이블의 모든 값을 섹션으로 표시해야합니다. 테이블에는 100 000 개의 행이 있습니다. 데이터가 나타날 때까지 거의 5 초가 걸리는 것을 제외하면 모든 것이 잘 작동합니다. 나는 이것이 행 수가 많아서 일어난다는 것을 이해합니다. 따라서 테이블 뷰를 10 000 줄마다 새로 고침하기로 결정했습니다. 각 10 000 행의 경우, 방법SQLite SELECT 및 UITableView

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 

호출하고 올바른 값을 반환하지만, cellForRowAtIndexPath은 결코 전체 선택 (100 000)의 끝 부분을 제외하고 호출되지되어 있습니다. 현재 주 스레드에서 SQL 쿼리를 실행하고 있습니다. 테이블 뷰가 업데이트되지 않거나 내가 누락 된 이유가 무엇입니까?

답변

0

테이블을로드하기 전에 데이터베이스를 모두 가져 오는 경우 예를 들어 분할해도 아무 것도 변경되지 않습니다. 그리고 주 스레드는 UI 스레드이므로 긴 SQL 페칭으로 블로킹하면 테이블 뷰로드가 지연됩니다.

화면에 최대 10 - 20 행을 표시 할 수 있도록 100,000 개의 행이있을 필요는 없습니다.

numberOfRowsInSection에 카운트를 가져오고 cellForRowAtIndexPath (또는 그 이하)의 1000 요소를 가져 오지 않는 것이 왜 가능한 빨리 표시해야하는지 파악한 다음 나머지 부분을 가져 오는 것입니다. 필요한 경우 데이터. 사람이 스크롤하고 1000 개의 행이 있고 사람이 행 700으로 스크롤하면 마찬가지로 다른 1000을 가져올 수 있습니다.
응용 프로그램이 수행하는 작업과 스크롤 작업이 필요한 빈도에 따라, 그것은 그것을 할 수있는 방법 일 수 있습니다.

+0

문제는 섹션이 있다는 것입니다. 내가 각 섹션에 대해 처음으로 n 개의 행을 가져 오는 것이 좋습니다. 사용자가 문자 A에 있고 문자 Z를 탭했다고 가정 해 봅시다. 그런 다음 사용자가 스크롤하여 문자 Y에있게됩니다. 해당 셀에 대한 데이터는 아직 제공되지 않습니다. – Adriana

+0

@adriana 내가 제안하는 바는 : 처음에는 약간의 호흡 실을 보여줄 필요가있다. 그래서 가능한 한 빨리 사용자에게 무엇인가를 보여줄 수 있고 나머지는 필요한만큼 또는 한꺼번에 가져올 수있다. –