iOS除錯——關於insertRowsAtIndexPaths方法崩潰以及動畫實效的處理辦法
阿新 • • 發佈:2019-01-01
有這樣一個場景,新增了一個數據,然後再插入一個新的資料,會因為numberOfRowInSection多次重新整理後個數與資料來源不一致而崩潰。
插入方法:
[_tableView beginUpdates];
[_tableViewinsertRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationLeft];
[_tableViewendUpdates];
代理方法:
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger
{
return _dataArray.count;
}
處理辦法:
1.在插入前就保證資料個數一致,比如更新了資料後就呼叫reloadData;
2.插入方法改為新增資料來源,然後reloadData
插入動畫失效處理:
1.使用了reloadData使動畫失效,即使先插入,後reloadData.(插入會更新UI,其實不需要再reloadData)
2.插入方法放在了animation動畫中,需要將插入提出來
另外,測試發現beginUpdates和endUpdates可以不要,雖然是作為動畫的處理,去掉不影響動畫,不過還是按蘋果要求的在做插入刪除時加上吧,另外發現在iOS11中蘋果有新的block方法代替這兩個方法