在xcode 3.1.2中,我曾经在NSCollectionViewItem
的子类中加载NSCollectionViewItem
的nib,如下所示:
-(id)copyWithZone:(NSZone *)zone
{
id result = [super copyWithZone:zone];
[NSBundle loadNibNamed:@"PersonView" owner:result];
return result;
}
在xcode 3.2的10.6下,同样的方法不会产生错误,但它也不会加载
NSCollectionView
中的视图。还有什么事情要做才能让风景出现吗?
或者有没有更好的方法来实现这一点,将
NSCollectionItem
的超类更改为NSViewController
?毕竟,重写
copyWithZone
来实现这个标准功能对我来说总是一个难题。我认为应该可以指定ib中应该使用的nib,但苹果似乎不这么认为。我确实看过文档中提供的示例,但是这里使用
NSCollectionViewItem
以编程方式实例化了initWithNibName
,但是我想在ib中创建它。更新:
我按照kperryua的建议做了,但现在我无法从
NSCollectionViewItem
访问插座。我要做的是:- (void)setRepresentedObject:(id)object {
if (object) {
[labelName setValue:[object name]];
}
}
我将标签名绑定到文件所有者,即我的
NSCollectionViewItem
。以前在10.5中工作得很好,但现在没有分配插座(我用gdb检查过)。image showing the bindings http://img21.imageshack.us/img21/671/picya.png
更新2:
我还将
NSCollectionView
的itemPrototype
绑定到NSCollectionViewItem
的子类(personcontroller)。image showing bindings http://img503.imageshack.us/img503/4672/pic2d.png
现在
File's Owner
的PersonView.nib
和itemPrototype
的NSCollectionView
都指向我的子类。image showing console output http://img340.imageshack.us/img340/6184/pic3.png
正如您在屏幕截图中看到的那样,该项将显示,但由于无法访问outlet
labelName
,标签文本无法更改。我还记录了我试图设置的名称,以确保它不是“name”。
需要做什么来更改标签的值?
任何帮助都将不胜感激。
最佳答案
是的,雪豹让这件事容易多了。在ib中,单击nscollectionviewitem并设置nib名称和bundle名称(对于主bundle为空)。在personview nib中,将nscollectionviewitem设置为文件的所有者,并将-view出口连接到该nib中的视图。(看起来您可能已经在那个nib中设置了这样的设置。)其他所有内容都应该是自动的,并且重写copyWithZone:不应该是必需的。
关于objective-c - 10.6/Xcode 3.2中的NSCollectionView,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1484263/