Swift CollectionView Исключение удаления - PullRequest
0 голосов
/ 05 мая 2019

Я пытаюсь удалить ячейку collectionView, используя этот код:

myDataSourceArray.remove(at:index)
collectionView.performBatchUpdates({
collectionView.deleteItems(at: [indexPath])
}
, completion: nil)

это очень прямое удаление, и после попытки удалить любую ячейку из раздела 1, например, это вызывает исключение:

Завершение работы приложения из-за необработанного исключения «NSInternalInconsistencyException», причина: «Неверное обновление: недопустимое количество элементов в разделе 1. Количество элементов, содержащихся в существующем разделе после обновления (2), должно быть равно количеству элементов содержится в этом разделе до обновления (2), плюс или минус количество элементов, вставленных или удаленных из этого раздела (0 вставлено, 1 удалено), и плюс или минус количество элементов, перемещенных в или из этого раздела (0 перемещено в , 0 переместился). '

моя коллекция collectionView для ячеек: каждый раздел содержит 2 ячейки, как на картинке ниже my collection view

и для последнего раздела, если он содержит 1 ячейку, он будет содержать 1 ячейку

func collectionView(_ collectionView: UICollectionView, 
numberOfItemsInSection section: Int) -> Int {
    if myDataSourceArray.count%2==1 && myDataSourceArray.count/2 == section {
        return 1
    }else{
        return 2
    }
}

Что именно вызывает это исключение? Заранее спасибо:)

1 Ответ

0 голосов
/ 05 мая 2019

Вероятно, ваша проблема вызвана тем, что вы неправильно обрабатываете удаление из источника данных.

Правильный способ сделать это - удалить источник данных внутри блока обновления,в противном случае вы можете внести изменения вне блока обновления, но убедитесь, что интерфейс пользователя (перезагрузите его) до начала обновления (чего у вас не было).

Попробуйте переместить myDataSourceArray.remove(at:index) внутрь блока обновления.

https://developer.apple.com/documentation/uikit/uicollectionview/1618045-performbatchupdates

Другая вещь, которая, вероятно, не вызывает проблемы, но которую вы должны решать независимо (что я не вижу здесь у вас), - это удаление разделов вручную.Если ваша операция удаления приводит к удалению последней ячейки раздела, вы также должны удалить раздел, используя deleteSections(:).

...