OGeek|极客世界-中国程序员成长平台

标题: ios - UITableView 在快速滚动时崩溃 [打印本页]

作者: 菜鸟教程小白    时间: 2022-12-13 08:49
标题: ios - UITableView 在快速滚动时崩溃

我有一个 TableView 填充从 NSFetchedResultsController 获取的数据。但是,当用户在表格 View 中滚动得太快(通常在表格底部附近)时,应用程序会停止响应。

Xcode 在

中显示一个崩溃断点

- (UITableViewCell *)tableViewUITableView *)tableView cellForRowAtIndexPathNSIndexPath *)indexPath

在我分配单元格属性的那一行:

cell.name.text = [Person firstName:speaker.firstName and LastName:speaker.lastName]; (cell 是 PersonStyleCell,UITableViewCell 的子类)。

编辑

玩弄 NSManagedObject 的错误状态属性,我现在得到了错误:

CoreData could not fulfill a fault for '0x37f8f0 

同样,只有当用户滚动 UITableView 太快时,应用才会崩溃。

知道应用程序崩溃的原因吗?没有内存泄漏,我只在 dealloc 方法中释放 NSFetchedResultsController 对象。可能是什么问题?

我意识到:

 ([(Person*)[self.personArray objectAtIndex:[indexPath row]] faultingState] == 0)

将检查存储在 NSManagedObject 中的数据是否有故障(即尚未“加载”),我认为问题在于它试图使用尚无法访问的数据设置单元格属性。

将“设置单元格属性”函数放在 if 语句中,如果数据没有错误,则仅继续设置单元格属性似乎修复了崩溃,但没有显示数据(我猜它初始化时,数据所有对象都设置为“故障”

我可以使用这个错误状态属性等到数据加载完毕后再设置单元格属性吗?如果有,怎么做?

我希望这些信息能大大简化我的问题



Best Answer-推荐答案


您设置的批量大小是多少?我在使用批量大小为 20 的大量轻量级对象时遇到了这个问题。增加批量大小(对我来说是 60)可以防止崩溃,而不会对滚动性能产生任何不利影响。

关于ios - UITableView 在快速滚动时崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7122758/






欢迎光临 OGeek|极客世界-中国程序员成长平台 (http://sqlite.in/) Powered by Discuz! X3.4