在 Xcode 3.1.2 中,我曾经像这样在我的 NSCollectionViewItem
子类中加载 NSCollectionViewItem
的 Nib :
-(id)copyWithZone:(NSZone *)zone
{
id result = [super copyWithZone:zone];
[NSBundle loadNibNamed:@"PersonView" owner:result];
return result;
}
在 10.6 下的 Xcode 3.2 中,相同的方法不会产生错误,但它也不会在 NSCollectionView
中加载 View 。
是否需要执行其他操作才能显示 View ?
或者是否有更好的方法来实现这一点,将 NSCollectionItem
的父类(super class)更改为 NSViewController
?
毕竟,重写 copyWithZone
以实现此标准功能对我来说总是很困难。我认为应该能够指定应该在 IB 中使用的 Nib ,但 Apple 似乎不这么认为。
我确实看过文档中提供的示例,但是 NSCollectionViewItem
是使用 initWithNibName
以编程方式实例化的,但我想在国际文凭。
更新:
我按照 kperryua 的建议做了,但现在我无法从 NSCollectionViewItem
访问导出。这是我正在尝试做的事情:
- (void)setRepresentedObject:(id)object {
if (object) {
[labelName setValue:[object name]];
}
}
我将标签名称绑定(bind)到文件所有者,即我的 NSCollectionViewItem
。这曾经在 10.5 中完美运行,但现在没有分配 socket (我用 GDB 检查过)。
image showing the bindings http://img21.imageshack.us/img21/671/picya.png
更新 2:
我还将 NSCollectionView
的 itemPrototype
绑定(bind)到我的 NSCollectionViewItem
(PersonController) 子类。
image showing bindings http://img503.imageshack.us/img503/4672/pic2d.png
现在 PersonView.nib
的 File's Owner
和 NSCollectionView
的 itemPrototype
都指向我的子类。
image showing console output http://img340.imageshack.us/img340/6184/pic3.png
如您在屏幕截图中所见,项目已显示,但无法更改标签文本,因为导出 labelName
不可访问。
我还记录了我试图设置的名称,以确保它不是“名称”。
需要做什么来改变标签的值?
如有任何帮助,我们将不胜感激。
最佳答案
是的,Snow Leopard 让这一切变得更容易。在 IB 中,单击 NSCollectionViewItem 并设置 nib 名称和包名称(只需将主包留空)。在您的 PersonView nib 中,使 NSCollectionViewItem 成为文件的所有者并将 -view 导出连接到该 nib 中的 View 。 (看起来你可能已经在那个 nib 中进行了这样的设置。)其他一切都应该是自动的,并且不需要覆盖 copyWithZone:。
关于objective-c - 10.6/Xcode 3.2 中的 NSCollectionView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1484263/