快速滚动UITableView
时出现崩溃。
崩溃是:
*** -[Not A Type release]: message sent to deallocated instance 0x1aded1c0
异常断点表明这是源:
- (void)updateInfo:(Item*)item{
if (!item) {
return;
}
Program *prg = (Program *)item;
self.titleLabel.text = prg.title; // crash here
self.descriptionLabel.text = prg.item_description;
}
此方法位于自定义表视图单元子类中,并且当来自Internet的数据准备好在单元格中显示时,将调用此方法。 我以前从未见过这种崩溃......
解决问题的最佳方法是什么?
答案 0 :(得分:3)
<强>原因:强>
当你滚动tableview时,顶部的单元格被释放,当数据来自互联网的那些单元格时,它们已经被释放。所以,改变你的逻辑。当您尝试访问和更新已释放的对象时,通常会收到此错误。正如您所说,此方法位于您的自定义单元格内,因此它清楚地表明该单元格已被释放。这就是当您尝试更新该单元格的任何视图时,您的应用程序崩溃的原因。
<强>解决方案:强>
您可以重新加载整个tableview或在接收数据时重新加载这些特定单元格。
答案 1 :(得分:2)
你在哪里调用方法“updateInfo”?你应该在cellForRowAtIndexPath
中调用它。您不应该存储对单元格的引用,然后调用它。
当您从服务中获取数据时,只需调用self.tableView reloadData
(或者如果您知道哪一行需要更新并且不希望性能下降,则可能reloadRowsAtIndexPaths
)