如何 Add/Remove 来自 NSCollectionView 的多个部分的项目

How to Add/Remove Items from NSCollectionView with Multiple Sections

背景:
我是一名新开发人员,我不确定去哪里寻求帮助。过去一周我一直在解决这个问题,但我不知道是什么导致了这个问题。这是我的第一个post,我想成为一个好的会员,所以如果我有任何错误,请告诉我,我很乐意改正。

谢谢!

问题:
我正在设置一个包含 5 个部分的 NSCollectionView。有 5 个按钮可以将新项目添加到五个部分,还有一个按钮可以删除所选项目。目前设置了一个按钮。

但是,这些项目似乎没有在集合视图中正确添加或删除。

而且,如果在启动时没有项目添加到集合视图,应用程序会崩溃。

此外,在添加新项目时,它会向集合视图添加一个额外的项目。

工作:
我学习了几个 NSCollectionView 教程,例如 raywenderlich.com、ductran.com、youtube 视频、媒体文章、whosebug.com posts 和 apple 文档。

以下是一些更有帮助的链接:
raywenderlich - part 1
raywenderlich - part 2
ductran - photo app
ductran - news app
apple - documentation

我从头到尾逐行调试,从头开始几次,构建最简单的集合视图并逐步添加到其中,引用自 UICollectionView。

我很想学习,但是 NSCollectionView 上可用的资源似乎很少。

代码:
我不确定问题出在哪里,所以我不知道要post.

哪个代码

我已将应用上传到 github:Link

我认为问题可能出现在 deleteItemsAtIndexPaths。错误的项目被删除,如果所有项目都被删除,应用程序会崩溃:

func deleteItemsAtIndexPaths(_ indexPaths: [IndexPath]) {
        var indexes = [Int]()
        for indexPath in indexPaths {
            indexes.append(absoluteIndexForIndexPath(indexPath))
        }
        var newWebsites = [Website]()
        for (index, website) in websites.enumerated() {
            if !indexes.contains(index) {
                newWebsites.append(website)
            }
        }
        websites = newWebsites
    }

fileprivate func absoluteIndexForIndexPath(_ indexPath: IndexPath) -> Int {
    var index = 0
    for i in 0 ... (indexPath as NSIndexPath).section {
        index += numberOfWebsitesInSection(i)
    }
    index += (indexPath as NSIndexPath).item
    return index
}

Adding/Deleting:
extra/wrong 项与 absoluteIndexForIndexPath 相关。它被设置为 ... 而不是 ..<

崩溃:
崩溃与 viewForSupplementaryElementOfKind 有关。 NSCollectionView 函数需要为 websitesInSection > 0

设置 if/then 使用 5 个部分和 5 个按钮工作 NSCollectionViewLink