tableView:canEditRowAtIndexPath:

作者: 上发条的树 | 来源:发表于2016-12-09 10:04 被阅读82次

    crash场景描述

    页面1 push 到页面2,页面2使用UITableView展示一个列表,cell左滑可以显示删除按钮。如果在显示“删除”按钮的时候,不点击“删除”按钮。直接点击返回按钮,程序就会crash。debug模式下如下:

    scene.png crash.png

    exc_bad_access(code=1,address=0x...)
    这什么鬼嘛,内存泄露?

    解决过程

    上网找了一番,找到可以定位到出错的代码的方式:
    http://www.cnblogs.com/16zj/p/5026776.html)。

    具体方式就是:

    在Xcode中:Product->Scheme->Edit Scheme->Run->Diagnostics->Memory Management->Zombie Objects(勾选)

    如下:

    Memory Management.png

    此时再次重现场景,会发现打印出“僵尸对象”的具体位置了:

    crash position.png

    [DataArraySource tableView:canEditRowAtIndexPath:]: message sent to deallocated instance 0x162e4e20
    由此果然证明这是由于 UITableViewCell 的“删除”按钮显示,而返回上个页面会引起crash。(由于有多个页面类似,有些地方则不会引起这个crash,我猜测是iOS系统本身的问题。)

    解决方式

    于是继续搜索下,发现别人也遇到同样的问题:
    http://stackoverflow.com/questions/19230446/tableviewcaneditrowatindexpath-crash-when-popping-viewcontroller

    果然,解决方式就是在UIViewController中加入如下代码即可:

    -(void)dealloc{
        [self.tableView setEditing:NO];
    }
    

    相关文章

      网友评论

        本文标题:tableView:canEditRowAtIndexPath:

        本文链接:https://www.haomeiwen.com/subject/fademttx.html