我目前有一个collectionView: UICollectionView
,它根据称为projects
的对象数组显示内容。有时我会从服务器收到名为newProjects
的更新数组。 newProjects
应该替换projects
作为collectionView
的数据源。
我想出了一种使用以下代码从数组中删除对象时更新collectionView
的方法:
var indexPaths = [IndexPath]()
for project in projects {
if(!newProjects.contains(project)) {
let index = projects.firstIndex(of: project)
indexPaths.append(IndexPath(item: index!, section: 0))
}
}
collectionView.deleteItems(at: indexPaths)
projects = newProjects
collectionView.reloadData()
这适用于已删除的项目。但是,我也试图对添加的项目做出反应。但是我的代码似乎失败了,因为我不断收到异常:
无效的更新:第0节中的无效项数。更新后(65)的现有节中包含的项数必须等于更新前的该节(64)中包含的项数,加号或减去从该部分插入或删除的项目数(插入的0,删除0),再加上或减去从该部分移入或移出的项目数(移入0,移出0)。
我用于添加项目比较的代码是:
// First, the deletion from the code above is called.
// project = newProjects and data reload doesn't happen after deletion.
var addIndexPaths = [IndexPath]()
for project in newProjects {
if(!projects.contains(project)) {
projects.append(content)
addIndexPaths.append(IndexPath(item: projects.count - 1, section: 0))
}
}
collectionView.insertItems(at: addIndexPaths)
projects = newProject
collectionView.reloadData()
我确定这段代码有点像黑客工作(因为它不起作用),但是老实说,我无法弄清楚如何可靠地更新UICollectionView
。有人有建议或有用的链接吗?干杯!
答案 0 :(得分:0)