iOS 开发每天分享优质文章iOS Developer

tableView:canEditRowAtIndexPath:

2016-12-09  本文已影响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];
}
上一篇下一篇

猜你喜欢

热点阅读