在 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中类对象实例对象类属性实例属性类方法实例方法静态方法