无效的更新:第0部分中的项目数无效

时间:2019-03-23 02:23:57

标签: ios swift xcode uicollectionview drag-and-drop

尝试将项目从一个UICollectionView(collectionView)拖到另一个(rackView)时遇到以下错误:

“ NSInternalInconsistencyException”,原因:“无效更新:第0节中的项目数无效。更新(7)之后,现有节中包含的项目数必须等于更新前该节中包含的项目数。更新(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 :(得分:0)

我实际上只是删除了performBatchUpdates方法,此问题已解决。 原因解释如下: https://fangpenlin.com/posts/2016/04/29/uicollectionview-invalid-number-of-items-crash-issue/