如何从具有多个节的NSCollectionView中添加/删除项目

时间:2019-05-10 15:15:11

标签: swift macos nscollectionview

背景
我是一名新开发人员,我不确定该去哪里寻求帮助。在过去的一周中,我一直在对这个问题进行故障排除,但是我不知道是什么导致了这个问题。这是我的第一篇文章,我想成为一个好会员,所以如果我有任何错误,请告诉我,我们将很乐意纠正。

谢谢!

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

但是,在收藏夹视图中似乎无法正确添加或删除项目。

而且,如果启动时没有将任何项目添加到收藏夹视图,则该应用程序将崩溃。

此外,在添加新项目时,它还会向收藏夹视图中添加一个额外的项目。

工作
我已经完成了多个NSCollectionView教程,例如raywenderlich.com,piperan.com,youtube视频,中型文章,stackoverflow.com帖子和Apple文档。

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

我已经从头到尾逐行调试,从头开始调试了几次,构建了最简单的集合视图并逐步添加到该视图(从UICollectionView引用)。

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

代码:
我不确定问题出在哪里,所以我不知道要发布哪个代码。

我已将应用程序上传到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
}

1 个答案:

答案 0 :(得分:1)

添加/删除:
多余/错误的项目与absoluteIndexForIndexPath有关。它设置为...而不是.. <

崩溃:
崩溃与viewForSupplementaryElementOfKind有关。 NSCollectionView函数需要为if/then设置websitesInSection > 0

NSCollectionView与5个部分和5个按钮配合使用:Link