Неверное обновление: недопустимое количество элементов в разделе 0 - PullRequest
0 голосов
/ 23 марта 2019

При попытке перетащить элементы из одного 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 = []
}

1 Ответ

0 голосов
/ 02 апреля 2019

Я на самом деле просто удалил метод executeBatchUpdates, и эта проблема была решена. Объяснение почему здесь: https://fangpenlin.com/posts/2016/04/29/uicollectionview-invalid-number-of-items-crash-issue/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...