2012-01-18 3 views
0

Мне нужно показать на UITableView с разделами все значения из таблицы 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

Если вы загружаете базу данных до того, как таблица имеет возможность загрузить, да, ее расщепление ничего не изменит. И основной поток - это поток пользовательского интерфейса, поэтому его блокировка при длительном наборе sql задержит загрузку вашего табличного представления.

Вам не нужно иметь 100 000 строк, чтобы иметь возможность отображать не более 10-20 строк на экране.

Почему бы просто не получить выборку для счета в numberOfRowsInSection и сделать выборку для 1000 элементов в cellForRowAtIndexPath (или меньше), идея заключалась бы в том, чтобы получить то, что вам нужно для отображения, как можно быстрее, а затем извлечь для остальной части вашего данные по мере необходимости. Как если бы человек прокручивался, и у вас 1000 строк, и человек прокручивается до строки 700, это может быть время для извлечения другого 1000.
В зависимости от того, что делает ваше приложение и как часто нужно прокручивать, это может быть способ сделать это.

+0

Проблема в том, что у меня есть разделы. Вы предлагаете мне просто получить первые n строк для каждого раздела, не так ли? Предположим, что пользователь находится в букве A, и он отбрасывает букву Z. Затем он прокручивается, и он будет в букве Y. Данные для этих ячеек еще не будут доступны. – Adriana

+0

@adriana Я предлагаю: просто получить то, что вам нужно, чтобы отобразить + небольшую комнату для передышки, чтобы вы могли как можно быстрее представить что-то пользователю, а затем принести остальное, по мере необходимости или сразу. –