2016-10-15 53 views
1

我允許用戶選擇/取消選擇我的集合視圖中的單元格,然後點擊保存/刪除按鈕。問題一次刪除集合視圖中的多個單元格

當我選擇行,我將它們添加到字典

var selectedIndexes = Dictionary<IndexPath, String>() 

,當我取消該行我設置selectedIndexes [indexPath] =零

當用戶點擊刪除我跑

for index in selectedIndexes.keys { 
     indexesToDelete.append(index) 
    } 
    collectionView.deleteItems(at: indexesToDelete) 

這進入selectedIndexes字典,抓起指標,增加了這些索引到的指標「indexesToDelete」一個數組,然後後for循環已經結束了,我deleti ng該索引數組。

當我運行此我得到:

終止應用程序由於未捕獲的異常「NSInternalInconsistencyException」,理由是:「無效的更新:在第0項的數目無效包含在現有的部分項目的數量後,更新(5)必須等於更新之前該部分中包含的項目數量(5),加上或減去從該部分插入或刪除的項目數(0插入,2刪除)以及正數或負數物品移入或移出該部分(0移入,0移出)。'

我已經打印了所有東西,而indexesToDelete是正在嘗試刪除的索引。我不完全明白錯誤信息在說什麼。

回答

1

這是說你的收藏視圖不再與你的數據源同步。因此,您還需要更新您用作dataSource的任何內容以反映您的更改,然後調用deleteCells。

+0

我不敢相信我剛掛上那個哈哈。謝謝,有時候一套新的眼睛對簡單的東西來說是天賜之物。 – user6820041

+0

完全沒問題:)很高興我能幫忙!此外,錯誤消息是可怕的哈哈 –

0
for index in selectedIndexes.keys { 
     indexesToDelete.append(index) 
    } 
yourCollectionViewDataSourceArray.remove(at: index) 
collectionView.deleteItems(at: indexesToDelete) 

如果您的collectionView數據源是yourCollectionViewDataSourceArray,它們都會同步到一起。每次collectionView重載數據時,它都會使用帶有參數numberOfItemsInSection的函數。當它發現你的array.count與刪除後的項目總數不同時,它會給你這個錯誤。作爲一個規則,每次你想通過代碼更新你的collectionView時,在更新之前更新數據數組。希望有幫助

+0

這將有助於如果你能解釋爲什麼這個代碼修復了這個問題。 –

+0

如果您的collectionView數據源是yourCollectionViewDataSourceArray,則兩者都會同步到一起。每次collectionView重載數據時,它都會使用帶有參數numberOfItemsInSection的函數。當它發現你的array.count與刪除後的項目總數不同時,它會給你這個錯誤。作爲一個規則,每次你想通過代碼更新你的collectionView時,在更新之前更新數據數組。希望有幫助 – Rami

+0

編輯你的解釋到你的答案。 –

相關問題