Cocoa 正在NSCollectionViewItem实例中更新NSTableView

Cocoa 正在NSCollectionViewItem实例中更新NSTableView,cocoa,nstableview,nscollectionview,Cocoa,Nstableview,Nscollectionview,在我的设置中,我有一个连接到mac的卷的NSCollectionView。对于NSCollectionViewItem的视图,我有一个NSBox,里面有一个NSTableView,列出了该卷的内容 我的问题出现在尝试向NSTableView添加/删除项时。NSBox似乎初始化过一次,因此只有一个NSTableView。这意味着,当我想要更新NSTableView中的数据时,我不能调用IBMOutlet上的reloadData并让它更新所有表 如果我在NSBox的子类中创建了一个IBOutlet,

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

我的问题出现在尝试向NSTableView添加/删除项时。NSBox似乎初始化过一次,因此只有一个NSTableView。这意味着,当我想要更新NSTableView中的数据时,我不能调用IBMOutlet上的reloadData并让它更新所有表

如果我在NSBox的子类中创建了一个IBOutlet,那么该实例的值是nil,因此我不能通过它调用它

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

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

是否有人在NSCollectionViewItem的视图上使用过NSTableView?您是如何更新表的?

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


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

中发布该数组。我已经尝试过了,但遇到了两个问题。首先,我必须绑定表示对象的代码不再工作,因为我绑定到新子类CollectionViewItem的IBOutlet没有返回任何内容。其次,NSBox正在被挤压,以便所有的内容都可以放在NSCollectionView中,而在它被分散到两列之前,如果有足够的项目,它将滚动而不是挤压。更新:我现在已经解决了挤压问题。多亏了子类化、minItemSize和maxItemSize.OK,出口返回nil是因为我拖到新nib中的旧视图仍然在加载(duh!),并且没有连接,所以导致了错误。我写了一篇文章,你可能会发现它很有用。谢谢你的指导。不确定自您编写它以来,情况是否发生了很大的变化,但我发现-LoadFromNib并不存在,而是使用了-loadNibNamed。