从Array表示的NSCollectionView项中获取ArrayController中的选定对象

时间:2014-10-30 13:28:48

标签: xcode cocoa cocoa-bindings nsarraycontroller nscollectionview

有些日子,我只想把头靠在墙上。在处理Cocoa和Apple的超级通用文档时尤其如此。 (Apple的文档实际上非常好,我只是生气,我无法弄清楚这一点)

好的,所以我有一个'IOWallpaper'类,它存储一个'name'和'path' - 它连接到一个ArrayController

然后将此ArrayController连接到NSCollectionView,以便可以使用NSCollectionViewItem填充NSCollectionView。

我正在努力使你可以在NSCollectionView中选择一个项目,当你点击该项目时,它会从数组中返回它表示的IOWallpaper对象。

我最接近实现这一点的方法是在NSCollectionView上设置'Selection Indexes'绑定,然后使用observeValueForKeyPath作为'selectionIndexes'键。它知道我已经选择了1个对象,但我无法从使用观察者返回的NSArrayController对象中获取IOWallpaper对象。

基本上,我想将observeValueForKeyPath中的(id)'object'参数转换回IOWallpaper对象,以便我可以访问它的成员?

这可能没有任何意义,但这是我能解释的最好的。

感谢您的聆听。

1 个答案:

答案 0 :(得分:0)

回答你提出的问题:只是强调它:

IOWallpaper * myWallpaper = (IOWallpaper*) object[0];

除此之外,您应该观察NSMenuDidEndTrackingNotification以捕获选择点击:

// listen for end track event of our menu (the bottleneck for handling selections)
[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(handleEndTrack:)
                                             name:NSMenuDidEndTrackingNotification
                                           object:[[[self view] enclosingMenuItem] menu]];

这是从GridMenu sample project“借来的”。