【问题标题】:NSCollectionView cell order changes on view changeNSCollectionView 单元格顺序在视图更改时更改
【发布时间】:2018-03-23 07:28:09
【问题描述】:

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

这一切都很好,但是当我切换到另一个视图控制器然后返回到初始视图控制器时,集合视图的顺序会无缘无故地改变。我没有对数据源(NSMutableArray)进行任何更改,也没有添加/删除任何单元格,也没有调用reloadData。我不明白为什么集合视图单元格的顺序不断变化。

我已经做了一些测试,可以确认我的数据源中的数据顺序完全没有改变。所以对于集合视图来说,仅仅改变单元格的顺序是没有意义的。

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

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

另类想法

我可以改用NSTableView,因为它支持多列(与UITableView 不同)。所以我可以用 3 列创建一个 NSTableView。这种方法在性能方面会比NSCollectionView 更差(特别是如果我想添加很多单元格?)。

感谢您抽出宝贵时间,丹。

【问题讨论】:

  • 显示“itemForRepresentedObjectAt”的代码

标签: objective-c macos cocoa nscollectionview nscollectionviewitem


【解决方案1】:

我找不到集合视图出了什么问题。所以我最终使用了带有多列的NSTableView(而不是集合视图行)。我将每一列设置为一行(索引 0),这使得表格视图看起来与我正在使用的集合视图完全相同。

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

【讨论】:

  • 我打赌你错误地使用了 NSCollection。它不应该是这样的,这就是为什么我要你如何呈现数据的代码。这取决于您想要做什么,但是在调整窗口大小时,集合视图显然具有更好的交互视图。检查 iBooks 应用程序,它正在使用 NSCollectionView。 NSTableView 性能更好,但我只将它用于网格视图。
猜你喜欢
  • 1970-01-01
  • 2017-09-19
  • 2011-04-08
  • 2018-11-17
  • 1970-01-01
  • 2011-10-22
  • 1970-01-01
  • 2020-09-25
  • 2023-03-19
相关资源
最近更新 更多