objective-c - NSCollectionView 单元格顺序随 View 更改而更改

标签 objective-c macos cocoa nscollectionview nscollectionviewitem

我有一个包含标签栏设计的 macOS 应用程序(即:Tweetbot)。有 4 个选项卡链接到 4 个不同的 View Controller 。初始 View Controller ( View 一)包含一个 NSCollectionView,它水平显示 3 个单元格。

这一切都工作正常,但是当我切换到另一个 View Controller 然后返回到初始 View Controller 时, Collection View 的顺序无缘无故地改变了。我没有对数据源(这是一个 NSMutableArray)进行任何更改,也没有添加/删除任何单元格,也没有调用 reloadData。我不明白为什么 Collection View 单元格的顺序不断变化。

我已经做了一些测试,可以确认我的数据源中的数据顺序根本没有改变。因此,仅更改单元格的顺序对于 Collection View 来说是没有意义的。

我注意到的另一个奇怪的问题是,如果我将 Collection View 限制为 2 个单元格,则不会出现此问题。这让我想知道问题是否归因于某种在后台运行的 NSCollectionView 缓存方法?也许当 Collection View 回收单元格时,它使用了不正确的数据?

我尝试了很多不同的解决方案,但似乎没有任何效果。有谁知道我可以测试/尝试什么,以找出问题所在?

替代想法

我可以使用 NSTableView 来代替,因为它支持多列(与 UITableView 不同)。所以我可以制作一个包含 3 列的 NSTableView 。与 NSCollectionView 相比,这种方法的性能是否会更差(特别是如果我想添加大量单元格?)。

最佳答案

我无法找出 Collection View 出了什么问题。因此,我最终使用了具有多列(而不是 Collection View 行)的 NSTableView。我将每一列设置为一行(索引 0),这使得 TableView 看起来与我正在使用的 Collection View 完全相同。

在性能方面,表格 View 似乎也好得多。即使有数百列,滚动/交互时仍然非常流畅。

关于objective-c - NSCollectionView 单元格顺序随 View 更改而更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46691310/

相关文章:

ios - 在横向iPhone中制作全屏背景图像

objective-c - 仍然对 Objective C 变量作用域感到困惑

python - 从 OSX 为 Windows 创建 Kivy 包

macos - 打开终端进程退出后无法再次访问终端

macos - NSPopover - 可以隐藏标准窗口吗?

cocoa - 在 NSTextField 中设置背景颜色时出现不需要的白色背景

cocoa - 删除 CALayer 内容属性的插值

objective-c - 排序包含自定义对象的NSArray

objective-c - 可以访问自身并在整个实例中使用的 block

objective-c - 从ViewController(AppDelegate)强制刷新NSView