Swift 如何从具有多个节的NSCollectionView中添加/删除项
背景:Swift 如何从具有多个节的NSCollectionView中添加/删除项,swift,macos,nscollectionview,Swift,Macos,Nscollectionview,背景: 我是一个新的开发人员,我不知道去哪里寻求帮助。在过去的一周里,我一直在解决这个问题,但我不知道是什么导致了这个问题。这是我的第一篇帖子,我想成为一名好的会员,所以如果我犯了任何错误,请告诉我,我会很乐意改正的 谢谢大家! 问题: 我正在设置一个包含5个部分的NSCollectionView。有5个按钮可将新项目添加到五个部分,还有一个按钮可删除选定项目。目前,有一个按钮设置 但是,这些项在集合视图中似乎没有正确添加或删除 而且,如果在启动时没有将项目添加到集合视图,应用程序将崩溃 此外,
我是一个新的开发人员,我不知道去哪里寻求帮助。在过去的一周里,我一直在解决这个问题,但我不知道是什么导致了这个问题。这是我的第一篇帖子,我想成为一名好的会员,所以如果我犯了任何错误,请告诉我,我会很乐意改正的 谢谢大家! 问题:
我正在设置一个包含5个部分的
NSCollectionView
。有5个按钮可将新项目添加到五个部分,还有一个按钮可删除选定项目。目前,有一个按钮设置
但是,这些项在集合视图中似乎没有正确添加或删除
而且,如果在启动时没有将项目添加到集合视图,应用程序将崩溃
此外,在添加新项时,它会向集合视图添加一个额外的项
工作:我已经阅读了一些
NSCollectionView
教程,如raywenderlich.com、ductran.com、youtube视频、媒体文章、stackoverflow.com帖子和苹果文档
以下是一些更有帮助的链接:我已经从头到尾逐行调试,从零开始了几次,构建了最简单的集合视图,并逐步添加到其中,从UICollectionView引用 我渴望学习,但
NSCollectionView
上提供的资源似乎很少
代码:我不确定问题出在哪里,所以我不知道该发布哪个代码 我已将应用程序上载到github: 我认为问题可能发生在
deleteimsatindexpaths
上。删除了错误的项目,如果删除了所有项目,应用程序将崩溃: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
相关。它被设置为。。。而不是..<崩溃:
该崩溃与种类的SupplmentalElementofKind的视图相关。
NSCollectionView
函数需要为websitesInSection>0设置if/then
使用5个部分和5个按钮查看NSCollectionView
:一些改进问题的建议,希望能帮助您获得更好的答案和/或更快:1。学习并使用更多的格式化工具,例如,特别是使用反勾号将NSCollectionView作为NSCollectionView
,这样有助于使问题更容易直观地扫描信息的重要部分2。如果可能,链接到您正在查看的特定教程和文档;3.关于代码,拥有完整的回购协议是很好的,但也许可以猜测哪些代码是相关的,然后发布一些代码。另外,链接到一个特定的提交,以备以后修复。关于,您看到了吗?我对NSCollectionView
的东西不太熟悉,不知道这是否相关,我只是观察到,这可能是“如果启动时集合视图中没有添加项目,应用程序就会崩溃”。。。也许吧。@lindes,我已经添加了你的建议-看起来确实好多了,谢谢@林德斯,我知道了!写出问题,并与你讨论,有助于澄清问题。谢谢大家!@DavidLittlefield请不要在问题标题中添加“已解决”字样!Stackoverflow不是一个论坛。当你写完你的解决方案后,将帖子作为答案,他们将该答案标记为你问题的解决方案。读和读。