正如标题所暗示的那样,当用户滚动到列表底部时,我试图在uitableview中插入更多行。完整的原因是由于性能原因而懒得加载数据,而且数据集很大。
奇怪的是,如果我慢慢滚动然后它工作正常,但如果我快速滚动然后它在[tableView endUpdates];
上崩溃
数据源是一个nsmutablearray,它使用常见的fetchRequest从coredata加载数据。在我目前的情况下,我无法使用fetchedResultsController。
在调用insert之前和之后,数据源计数是正确的。行计数(和数据源计数)是正确的。
如果我慢慢滚动,稍后在某个点滚动快速,它会崩溃,索引超出边界时通常会出现相同的错误,但是当tableview为时,错误消息中的索引和边界与原始计数不一致第一个绑定(在任何插入发生之前)。行数为4,数据源数为4&等
这是错误:
Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArrayM objectAtIndex:]: index 3 beyond bounds [0 .. 2]'
我也尝试在cellForRowAtIndexPath方法中插入行,但结果相同。
有什么想法吗?
答案 0 :(得分:3)
这不是解决大型数据集滚动问题的正确方法。
UITableView
的目的是在任何时候只在内存中保留少量单元格。相反,您应该考虑在从Core Data获取数据时限制批量大小。其次,您还应该针对您的应用程序运行工具并确认热点位置。滚动或细胞群是极不可能的慢点。
BTW,NSMutableArray
在处理Core Data的结果时很少有用。除非您有特定原因要求NSMutableArray
,否则您应该将其更改为NSArray
。
答案 1 :(得分:0)
在应用程序启动时预先填充NSMutableArray
吗?目前我假设您使用控制器对象作为UITableViewDelegate
只返回最终行数,而NSMutableArray
在您移动时会被填满?
在这种情况下,如果加快滚动速度,从Core Data加载可能会太慢,导致数组中出现“漏洞”。