在 NSCollectionViewItem 实例中更新 NSTableView

Posted

技术标签:

【中文标题】在 NSCollectionViewItem 实例中更新 NSTableView【英文标题】:Updating NSTableView in an instance of NSCollectionViewItem 【发布时间】:2009-09-07 10:01:42 【问题描述】:

在我的设置中,我有一个连接到 mac 的卷的 NSCollectionView。对于 NSCollectionViewItem 的视图,我有一个 NSBox,里面有一个 NSTableView,列出了该卷的内容。

我的问题是在尝试向 NSTableView 添加/删除项目时出现的。 NSBox 好像初始化过一次,所以只有一个 NSTableView。这意味着当我想更新 NSTableView 中的数据时,我无法在 IBOutlet 上调用 reloadData 并让它更新所有表。

如果我在 NSBox 的子类中创建一个 IBOutlet,它的实例是 nil,所以我不能通过它调用它。

我最接近的方法是在代码中包含一个@try @catch,该代码在列中的一行返回对象,由于该项目不再存在而发生异常,因此我可以获取tableView并调用reloadData,这似乎更新了特定的 NSTableView。

这样做的问题是,如果删除的项目在表的末尾,或者如果添加了一个项目,则不会发生异常,因为它可以看到所有现有项目。

有没有人在 NSCollectionViewItem 的视图上使用 NSTableView 的经验?您是如何更新表格的?

【问题讨论】:

我写了一个blog post about NSCollectionView,你可能会觉得有用。 感谢您的指导。不确定自从您编写后事情是否发生了很大变化,但我发现 -LoadFromNib 不存在并使用 -loadNibNamed 代替。 【参考方案1】:

将 NSBox(及其 NSTableView)放入它自己的 nib 中。每次创建新的集合视图项时,加载 nib,将该 NSBox 设置为集合视图项的视图,然后释放 NSBox。

至于提供表格视图,最简单的方法可能是绑定。将表视图的每一列绑定到集合视图项表示的模型对象的不同属性。当然,您可能想要通过一个数组控制器,这意味着每个集合视图项都有一个,并将它们添加到数组中,您将在 dealloc 中发布。

【讨论】:

我已经尝试过了,但遇到了两个问题。首先,我必须绑定表示的对象的代码不再起作用,因为我绑定到新的子类 CollectionViewItem 的 IBOutlet 不返回任何内容。其次,NSBox 被压扁,使其全部放入 NSCollectionView 中,而在它分布在两列之前,如果有足够的项目,它会滚动而不是压扁它们。 更新:我现在已经修复了挤压问题。感谢子类化,minItemSize 和 maxItemSize。 OK 出口返回 nil 是由于我拖入新笔尖的旧视图仍在加载(呃!)并且未连接,因此导致错误。现在全部排序:)

以上是关于在 NSCollectionViewItem 实例中更新 NSTableView的主要内容,如果未能解决你的问题,请参考以下文章

python中类对象实例对象类属性实例属性类方法实例方法静态方法

如何在SQL server 2008 新建两个实例

为啥我能够从在同一对象的另一个实例上调用的方法访问一个实例的私有实例变量? [复制]

可以在Linux下安装两个oracle实例吗

sQL server 啥是实例

如何在实例中获取 AWS OpsWorks 实例 ID?