tableView滑动删除,返回导致程序崩溃问题


tableview滑动删除功能,一般用到tableView的两个数据源方法

 

- (BOOL)tableView:(UITableView*)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath{

    return YES;

}

- (void)tableView:(UITableView*)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyleforRowAtIndexPath:(NSIndexPath *)indexPath;

实现后,删除某个cell没有问题,但滑动一行但不选中delete按钮,就点击导航栏的返回按钮,出现了崩溃现象,而且崩溃是出现在跳回到之前的界面之后,崩溃之后提示打印出EXE_BAD_ACESSS错,直接到了 main 函数里,通过xcode自带的僵尸方法,这样一来就会有打印错误提示了,具体方法如下:



之后崩溃报错提示问题如下:

 015-03-18 15:03:53.818 O2O[1289:111104] *** -[DeliveryAddrListController tableView:canEditRowAtIndexPath:]: message sent to deallocated instance 0x7be55fe0

类名 DeliveryAddrListController  tableView:canEditRowAtIndexPath: 方法调用已经销毁的内存

解决方法:

1. 直接不要实现tableView:canEditRowAtIndexPath:这个方法,运行正常

 

2.在DeliveryAddrListController类将销毁的时候,取消掉tableview的编辑状态,运行正常

-(void)viewWillAppear:(BOOL)animated{

    [super viewWillDisappear:animated];

    [self.myTableView setEditing:NO];

}

以下为网上另一个博主的文章内容:

虽然问题解决了,但是还是觉得,canEditRowAtIndex这个方法应该不会有问题,于是我再 ios 6 的模拟器下运行程序,重复操作没问题(当然注释掉viewWillDisappear 方法),后来到网上找了好多资料,很大神都说可能是苹果自身的问题,ios7 才有这个问题,ios6 以及以下不会出现这种问题,

 

至此,问题得到解决,以上列出了两种解决方案:

1,删掉canEditRowAtIndexPath这个方法不用,不会出问题;

2,加上上面说的 viewWillDisappear 方法也可以解决问题;但是我个人推荐第二种方法,虽然第一种方法也是可以解决问题的,但是个人还是觉得这两个方法配套使用比较好。

 最终总结出问题可能是在 canEditRowAtIndexPath 这个方法里设置了YES然后返回的时候没有把它设置成 NO 所以报错,ios6会自动设置成NO,iOS7 就手动设置成 NO也可以。所以以后无论什么版本,我们都加上viewWillDisappear手动设置 editing 这个属性为NO 这样确保万无一失。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值