swift - 如何从具有多个部分的 NSCollectionView 添加/删除项目

标签 swift macos nscollectionview

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

谢谢!

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

但是,这些项目似乎没有在 Collection View 中正确添加或删除。

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

此外,在添加新项目时,它会向 Collection View 添加一个额外的项目。

工作:
我学习了多个 NSCollectionView 教程,例如 raywenderlich.com、ductran.com、youtube 视频、medium 文章、stackoverflow.com 帖子和 apple 文档。

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

我从头到尾逐行调试,从头开始几次,构建最简单的 Collection View 并逐步添加到其中,引用自 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
}

最佳答案

添加/删除:
额外/错误的项目与 absoluteIndexForIndexPath 相关。它被设置为 ... 而不是 ..<

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

设置一个 if/then 使用 5 个部分和 5 个按钮的 NSCollectionView:Link

关于swift - 如何从具有多个部分的 NSCollectionView 添加/删除项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56080442/

相关文章:

objective-c - 在没有绑定(bind)的情况下使用 NSCollectionView

ios - 如何从 Date 中获取 "yyyy-MM-dd' T'HH :mm:ss. SSSZZZZZ"格式的日期字符串?

swift - 如何在类层次结构中正确实现 Equatable 协议(protocol)?

ios - 核心数据:后台NSManagedObjectContext上的更新在保存时不起作用

从 windows 和 mac 通过 ssh 编译和运行 C 程序 -- windows 出现 seg 错误

c - 如何在 OSX 上制作 .so 可执行文件?

swift - NSCollectionView 内拖放示例

ios - dequeueReusableCell(indexPath: IndexPath 的 withIdentifier 标识符 : String,)在每次调用时返回 2 个不同的单元格

objective-c - SecurityAgentPlugin 在 Yosemite 上不再工作(SFAuthorizationPluginView)

objective-c - NSCollectionView 不显示其内容