У меня есть табличное представление с более чем 1000 ячейками (на экране отображается около 10). После действия пользователя «фильтровать» я хочу удалить около 80% из них, затем через второй фильтр еще 80%. При работе с 100 ячейками это примерно мгновенно, но с 1000 требуется 0,5 секунды для завершения метода [tableView endUpdates], и это полностью разрушает пользовательский опыт.
Я создаю массив путей индекса следующим образом:
for (int i=1; i<[appDelegate.myArray count]; i++) { //more than 1000 objects in myArray
if (![[appDelegate.myArray objectAtIndex:i] myTest]) { //myTest returns a BOOL
[appDelegate.rowsToDelete addObject:[NSIndexPath xxxxx]]; //the index path of the object that just failed the test and must be removed];
}
}
[self.myTableViewController.tableView deleteRowsAtIndexPaths:appDelegate.rowsToDelete withRowAnimation:UITableViewRowAnimationRight];
Я испробовал 2 решения, одно из которых является многопоточным, чтобы мой пользователь мог видеть, как другие части пользовательского интерфейса перемещаются в процессе обновления tableView. Но если он запускает другой уровень фильтрации, это часто приводит к долгому ожиданию, если не к сбою.
Я также попытался удалить первые несколько ячеек (те, что на экране), а затем просто удалить другие объекты, которые не прошли тест, из источника данных, не удаляя их соответствующие ячейки из tableView, поскольку они находятся вне поля зрения. Это дает хороший, быстрый результат, но у меня тогда возникают проблемы с количеством строк, таких как:
'Неверное обновление: недопустимое количество строк в разделе 0. Число строк, содержащихся в существующем разделе после обновления (94), должно быть равно количеству строк, содержащихся в этом разделе до обновления (927). ), плюс или минус количество строк, вставленных или удаленных из этого раздела (0 вставлено, 215 удалено). '
У кого-нибудь была такая проблема с производительностью? способы решить это?
Ура,
CD