尝试将项目从一个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 = []
}
答案 0 :(得分:0)
我实际上只是删除了performBatchUpdates方法,此问题已解决。 原因解释如下: https://fangpenlin.com/posts/2016/04/29/uicollectionview-invalid-number-of-items-crash-issue/