有这样一个场景,新增了一个数据,然后再插入一个新的数据,会因为numberOfRowInSection多次刷新后个数与数据源不一致而崩溃。
插入方法:
[_tableView beginUpdates];
[_tableViewinsertRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationLeft];
[_tableViewendUpdates];
代理方法:
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return _dataArray.count;
}
处理办法:
1.在插入前就保证数据个数一致,比如更新了数据后就调用reloadData;
2.插入方法改为新增数据源,然后reloadData
插入动画失效处理:
1.使用了reloadData使动画失效,即使先插入,后reloadData.(插入会更新UI,其实不需要再reloadData)
2.插入方法放在了animation动画中,需要将插入提出来
另外,测试发现beginUpdates和endUpdates可以不要,虽然是作为动画的处理,去掉不影响动画,不过还是按苹果要求的在做插入删除时加上吧,另外发现在iOS11中苹果有新的block方法代替这两个方法