我正在尝试从位于表视图内的集合视图中插入(然后删除)项。将项目插入集合视图时,出现以下错误:
*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'attempt to insert item 0 into section 0, but there are only 0 items in section 0 after the update'
我读过许多其他文章,说问题是在试图将项目插入到集合视图之前没有更新集合视图数据源,因此两者之间的大小不一致。我的集合视图数据源是一个字符串数组,我可以从一个用户可以键入的文本框中获得该字符串。当用户在键盘上按回车键时,我想将他们键入的任何内容添加到集合视图中。因此,我有以下方法:
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
searchedItemsArray.append(textField.text!)
searchedItems.insertItems(at: [IndexPath(row: searchedItemsArray.count - 1, section: 0)])
textField.resignFirstResponder()
return true
}
其中searchedItemsArray是数据源,searchedItems是集合视图。如您所见,我确实在收集视图之前更新了数据源。我还验证了该字符串已正确附加到集合视图中。当用户输入第一项时,我打印了数组的大小并在调用collectionView.insert()方法之前验证它的大小为1。
对于收藏夹视图,我也有这种方法:
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return searchedItemsArray.count
}
我从其他答案中得出的结论是,收集视图和数据源必须不同步,但是我对实际发生的位置感到困惑。
我看到的另一种可能的解决方案是使用用户performBatchUpdates(),但这似乎是不必要的,因为我正在更新collectionView中的单个内容。