[Not A Type release]:发送到UITableView中的deallocated实例的消息

时间:2014-08-19 12:59:37

标签: ios objective-c uitableview

快速滚动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的数据准备好在单元格中显示时,将调用此方法。 我以前从未见过这种崩溃......

解决问题的最佳方法是什么?

2 个答案:

答案 0 :(得分:3)

<强>原因:
当你滚动tableview时,顶部的单元格被释放,当数据来自互联网的那些单元格时,它们已经被释放。所以,改变你的逻辑。当您尝试访问和更新已释放的对象时,通常会收到此错误。正如您所说,此方法位于您的自定义单元格内,因此它清楚地表明该单元格已被释放。这就是当您尝试更新该单元格的任何视图时,您的应用程序崩溃的原因。

<强>解决方案:
您可以重新加载整个tableview或在接收数据时重新加载这些特定单元格。

答案 1 :(得分:2)

你在哪里调用方法“updateInfo”?你应该在cellForRowAtIndexPath中调用它。您不应该存储对单元格的引用,然后调用它。

当您从服务中获取数据时,只需调用self.tableView reloadData(或者如果您知道哪一行需要更新并且不希望性能下降,则可能reloadRowsAtIndexPaths