更新 NSCollectionViewItem 实例中的 NSTableView
在我的设置中,我有一个连接到 mac 的卷的 NSCollectionView。对于 NSCollectionViewItem 的视图,我有一个 NSBox,其中有一个 NSTableView,其中列出了该卷的内容。
当尝试向 NSTableView 添加/删除项目时,我的问题出现了。 NSBox好像初始化了一次,所以只有一个NSTableView。这意味着当我想要更新 NSTableView 内的数据时,我无法在 IBOutlet 上调用 reloadData 并让它更新所有表。
如果我在 NSBox 的子类中创建 IBOutlet,则该实例的 IBOutlet 为零,因此我无法通过它调用它。
我最接近的是在返回列中一行的对象的代码周围加上一个 @try @catch ,因为该项目不再存在而发生异常,所以我可以抓取 tableView 并调用 reloadData ,这似乎更新特定的 NSTableView。
这样做的问题是,如果删除的项目位于表的末尾,或者添加了项目,则不会发生异常,因为它可以看到所有现有项目。
有没有人有过在 NSCollectionViewItem 的视图上使用 NSTableView 的经验?你是如何更新表格的?
In my setup I have an NSCollectionView of volumes connected to the mac. For the NSCollectionViewItem's View I have an NSBox with an NSTableView inside listing the contents of that volume.
My problem comes when trying to add/remove items to the NSTableView. The NSBox seems to be initialised once, so there is only one NSTableView. This means that when I want to update the data inside the NSTableView I cannot call reloadData on an IBOutlet and have it update all the tables.
If I create an IBOutlet in a subclass of the NSBox, it is nil for the instance, so I cannot call it via that.
The closest I have come is by enclosing a @try @catch around the code that returns the object at a row in a column, an exception occurs because that item no longer exists, so I can grab the tableView and call reloadData, which seems to update that specific NSTableView.
The problem with this is that if the item removed is at the end of the table, or if an item is added, the exception won't occur as it can see all the existing items.
Has anyone had any experience with an NSTableView on an NSCollectionViewItem's View? How did you update the tables?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
将 NSBox(及其 NSTableView)放入其自己的笔尖中。每次创建新的集合视图项时,加载 nib,将该 NSBox 设置为集合视图项的视图,然后释放 NSBox。
至于提供表视图,最简单的方法可能是绑定。将表视图的每一列绑定到集合视图项表示的模型对象的不同属性。当然,您可能需要使用数组控制器,这意味着每个集合视图项都有一个数组控制器,并将它们添加到一个数组中,您将在
dealloc
中释放该数组。Put the NSBox (with its NSTableView) into its own nib. Each time you create a new collection view item, load the nib, set that NSBox as the collection view item's view, and release the NSBox.
As for feeding the table views, the easiest way is probably Bindings. Bind each column of the table view to a different property of the model object that the collection view item represents. You'll probably want to go through an array controller, of course, which means having one of those per collection view item, and adding them to an array, which you'll release in
dealloc
.