【发布时间】:2012-08-04 06:26:18
【问题描述】:
我有一个包含 1000 多个单元格的表格视图(我在屏幕上显示大约 10 个)。在用户执行“过滤”操作后,我想删除其中的大约 80%,然后在第二次过滤后又删除 80%。当使用 100 个单元格时,它大致是瞬时的,但对于 1000 个单元格,完成方法 [tableView endUpdates] 需要 0.5 秒,这完全破坏了用户体验。
我这样创建索引路径数组:
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 种解决方案,一种是线程化,以便我的用户可以看到 UI 的其他部分在 tableView 正在更新时移动。但是如果他启动另一个级别的过滤,这通常会导致长时间等待,如果不是崩溃的话。
我还尝试删除前几个单元格(屏幕上的单元格),然后从数据源中删除未通过测试的其他对象,而不从 tableView 中删除它们对应的单元格,因为它们看不见。这给出了良好、快速的结果,但随后我遇到了行数问题,例如:
'无效更新:第 0 节中的行数无效。更新后现有节中包含的行数 (94) 必须等于更新前该节中包含的行数 (927 ),加上或减去从该部分插入或删除的行数(0 插入,215 删除)。'
有人遇到过这样的性能问题吗?解决方法? 干杯, 光盘
【问题讨论】:
标签: performance ipad uitableview rowdeleting