解決刪除Cell/item時(shí)removeObjectAtIndex崩潰問(wèn)題

解決collectionView/tableView使用deleteItemsAtIndexPaths:方法帶動(dòng)畫刪除item/cell時(shí)可能引起removeObjectAtIndex:崩潰問(wèn)題

解決方法:

參考鏈接:http://www.itdecent.cn/p/f89ee2802679

思路:通過(guò)調(diào)用collectionView或tableView的performBatchUpdates:方法來(lái)處理刪除邏輯后,在completion block中調(diào)用reloadData:已刷新item,可防止崩潰

代碼實(shí)例:

// 官方解釋
- (void)performBatchUpdates:(void (NS_NOESCAPE ^ _Nullable)(void))updates completion:(void (^ _Nullable)(BOOL finished))completion; // allows multiple insert/delete/reload/move calls to be animated simultaneously. Nestable.

// 適用場(chǎng)景,cell的點(diǎn)擊事件通過(guò)block回調(diào)的情形,不然會(huì)造成indexPath值錯(cuò)亂,因?yàn)檎{(diào)用deleteItemsAtIndexPaths:方法時(shí),只會(huì)調(diào)用numberOfItemsInSection刷新一下item的數(shù)量,并不會(huì)調(diào)用cellForItemAtIndexPath來(lái)刷新數(shù)據(jù),(因?yàn)橹皇莿h除,item的內(nèi)容不會(huì)變,只會(huì)動(dòng)一下位置)造成崩潰。

// 解決方案:(核心代碼)

[collectionView performBatchUpdates:^{

        // 首先刪除數(shù)據(jù)源
    [self.dataAry removeObjectAtIndex:indexPath.row];
        // 刪除item
    [collectionView deleteItemsAtIndexPaths:@[indexPath]];

}completion:^(BOOL finished){

    [collectionView reloadData];// reloadData 保證item indexPath的一一對(duì)應(yīng)。

}];
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容