0

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

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

如果我在 NSBox 的子类中创建一个 IBOutlet,则该实例为 nil,因此我无法通过它调用它。

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

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

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

4

1 回答 1

1

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

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

于 2009-09-07T11:34:15.480 回答