При попытке перетащить элементы из одного UICollectionView (collectionView) в другой (rackView) возникает следующая ошибка:
«NSInternalInconsistencyException», причина: «Недопустимое обновление: недопустимое количество элементов в разделе 0. Количество элементов, содержащихся в существующем разделе после обновления (7), должно быть равно количеству элементов, содержащихся в этом разделе до update (6), плюс или минус количество элементов, вставленных или удаленных из этого раздела (0 вставлено, 0 удалено) и плюс или минус количество элементов, перемещенных в или из этого раздела (0 перемещено, 0 перемещено). «
Странно, почти тот же код работает для перетаскивания, когда я перетаскиваю элементы из rackView в collectionView. rackView корректно обновляется, когда элементы удаляются из источника данных стойки, но вылетает, когда элементы добавляются обратно с доски (collectionView). Кто-нибудь знает, почему это происходит, и есть ли способ ее решить?
Спасибо за любую информацию, которую вы можете предоставить.
Я попытался добавить переменную, которая представляет счетчик в стойке, и вернуть его в методе numberOfItemsInSection. Это заявлено как возможное решение этой ошибки в другом месте, но, похоже, не решает ее для меня.
private func moveItemsFromRack(coordinator: UICollectionViewDropCoordinator, destinationIndexPath: IndexPath, collectionView: UICollectionView)
{
collectionView.performBatchUpdates({
for (index, item) in coordinator.items.enumerated()
{
let indexPath = IndexPath(row: destinationIndexPath.row + index, section: destinationIndexPath.section)
self.board[indexPath.row] = item.dragItem.localObject as! String
self.rack.remove(at: self.sourceIndex.row)
}
DispatchQueue.main.async {
collectionView.reloadItems(at: [destinationIndexPath])
self.rackView.reloadData()
}
})
self.sourceIndex = []
}
private func moveItemsFromBoard(coordinator: UICollectionViewDropCoordinator, destinationIndexPath: IndexPath, collectionView: UICollectionView)
{
collectionView.performBatchUpdates({
for (index, item) in coordinator.items.enumerated()
{
let indexPath = IndexPath(row: destinationIndexPath.row + index, section: destinationIndexPath.section)
self.rack.insert(item.dragItem.localObject as! String, at: indexPath.row)
self.board[self.sourceIndex.row] = ""
}
DispatchQueue.main.async {
collectionView.reloadItems(at: [self.sourceIndex])
self.rackView.reloadData()
}
})
self.sourceIndex = []
}