我有一个在 CollectionView 的每个项目中使用的视图。从我的角度来看,我有一个到 CollectionViewItem 的 IBOutlet,并且我已将其连接到 Interface Builder 中。我想在我的视图代码中访问representedObject(这是一个核心数据对象)的值。这是我正在尝试执行的操作的示例——访问representedObject 的序列值:

在.h文件中:

IBOutlet NSCollectionViewItem *item; // Connected in IB

在 .m 文件中

NSString *seq = [[item representedObject] valueForKey:@"seq"];
NSLog(@"Seq: %@", seq); // returns Seq: (null)

我知道 seq 已填充,因为我使用 returnedObject.seq 键路径将其绑定到 IB 中 CollectionViewItem 视图中的标签,并且可以正常工作。

知道为什么当我尝试访问视图代码中的 seq 值时它返回 null 吗?

有帮助吗?

解决方案

这很可能是NSCollectionViewItem不超过IBOutlet中连接从他们的项目的意见复制原型NSCollectionViewItem。因此,item是零,所以seq也将是零。

用于访问NSCollectionViewItem实例的典型模式是结合到原型。你提到你做这做那它的作品。这很简单,因为这是做它的典型,支持的方式。

如果你真的需要的方式,绑定不能提供该项目直接连接,你可能不得不手动设置。要做到这一点的方法之一是覆盖NSCollectionViewItem的-copyWithZone:,调用超,然后手动进行连接。

其他提示

1)的子类,用于在收集视图

渲染项目的NSView

2)在该亚类中,添加一个代表属性

3)的Sublcass NSCollectionViewItem

4)重写的setView:方法。添加一行设置视图到NSCollectionViewItem实例(即自我)的代表属性。

现在是NSView子类中,你将不得不通过委托属性(例如就可以访问它representedObject)访问对应NSCollectionView项。

我有同样的问题,但发现了一个很简单的解决办法:我把视图在不同的.xib和在NSCollectionViewItem联的(这其实是一个NSViewController)。则的.xib将被反序列化针对每个小区和所有出口都设置。

  1. NSView 的子类。
  2. 将委托方法添加到所述子类...就像是 - (void)mouseDownOnItemAtIndex:(NSUInteger)index 告诉侦听器用户单击了特定索引处的项目。
  3. 在同一个类中使用 self.superview 拉取集合视图。创建一个变量来存储 NSUInteger。使用方法存储项目的索引 [[collectionView subviews] indexOfObject:self]. 。在委托方法中传递该索引 index 范围。
  4. 符合 NSView 中定义的协议的类现在将能够侦听特定单元格上的任何 mousedown 事件。如果你想要特定项目的representedObject,只需调用 collectionView:itemAtIndex 并通过访问它来获取该项目 representedObject 属性于 NSCollectionViewItem.
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top