访问NSCollectionView的视图控件

Rog*_*ger 3 cocoa nscollectionview

我正在用一个NSCollectionView来显示各种物体.除了一件烦人的事情外,整件事情都运作良好.我无法弄清楚如何访问用于表示集合中每个对象的视图上的各种控件.

这是设置:

  • NSCollectionView在IB中拖入了我的观点.
  • 我做了一个自定义的子类NSCollectionViewItem.在IB中映射我的班级.
  • 我创建了一个自定义子类,NSBox作为集合中每个对象的视图.还在IB中映射此类并将其连接到view我的NSCollectionViewItem子类的属性.
  • 我在IB中创建了所有绑定,以显示每个对象的正确信息.

风景:

在此输入图像描述

生成的集合视图:

在此输入图像描述

推断我的子类NSCollectionViewItem基本上是集合中每个视图的控制器,我在控制器子类的视图中引用了各种控件的出口:

@interface SourceCollectionViewItem : NSCollectionViewItem

@property (weak) IBOutlet NSTextField *nameTextField;
@property (weak) IBOutlet NSTextField *typeTextField;
@property (weak) IBOutlet RSLabelView *labelView;
@property (weak) IBOutlet NSButton *viewButton;

@end
Run Code Online (Sandbox Code Playgroud)

当我检查SourceCollectionViewItem调试器中的任何实例时,所有属性都显示为nil,尽管事实上我可以在屏幕上看到它们并且所有内容都显示为应该是.

我的设置灵感来自Apple的示例应用程序IconCollection.

我显然缺少一些东西.什么?

编辑:我发现各种帖子暗示了类似的问题: CocoaBuilder.com和SO上的这个问题.

编辑:只是为了完成:这篇文章也涉及主题,并提供一个基于接受的答案中提到的选项组合的解决方案.

ham*_*ene 6

在笔尖加载期间设置出口,并且仅从笔尖加载原型项并分配其出口.所有其他ViewItems和它们的Views都是从原型中克隆出来的,在这种情况下,outlet只是从未初始化的实例变量.

以下是我可以提出的选项:

  • 覆盖newItemForRepresentedObject:集合视图并重新加载nib而不是克隆原型.但这可能会大大损害性能.
  • 覆盖copyWithZone集合视图项并手动分配出口 viewWithTag:以查找它们.
  • 放弃并尝试仅通过绑定提供数据.