记一次UI操作小坑及解决方法(UITableView删除、插入崩溃)

先说下踩坑的两个地方~

- (void)insertRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation;
- (void)deleteRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation;

涉及到单元格删除和插入操作的时候,一不小心crash了,排查了很久没有找到原因。最后一通神(luan)操作发现了一点头绪 Orz.

说一下原因吧:

插入和删除的过程中,并没有执行reload方法,所以每个cell对应的indexPath并没有更新。这个时候继续调用删除或者插入操作,就会出现操作错误,涉及到数组操作的话,就直接崩了~

解决方法
1. 每次执行完以后调用
- (void)reloadData;
或者
- (void)reloadRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation NS_AVAILABLE_IOS(3_0);
或者
- (void)reloadSections:(NSIndexSet *)sections withRowAnimation:(UITableViewRowAnimation)animation NS_AVAILABLE_IOS(3_0);

好处就是不会出错,因为每次刷新后,indexPath都是正确的;坏处嘛~ 就是会一闪闪的。看各位能不能接受咯(手动滑稽)

2.获取当前cell真正indexPath信息

讲真,一开始想到这个思路的时候脑洞有点大,大概是这样:先记录一下本次操作的row,下一次操作的时候判断操作的row是不是大于上一次操作时的row,然后巴拉巴拉~~
。。。。

不皮了,其实只需要用一个方法 :

- (nullable NSIndexPath *)indexPathForCell:(UITableViewCell *)cell;   

根据cell来获取对应的indexPath就好了~

最后:希望对大家有帮助

你可能感兴趣的:(记一次UI操作小坑及解决方法(UITableView删除、插入崩溃))