在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:
我还将NSCollectionViewitemPrototype绑定到NSCollectionViewItem的子类(personcontroller)。
image showing bindings http://img503.imageshack.us/img503/4672/pic2d.png
现在File's OwnerPersonView.nibitemPrototypeNSCollectionView都指向我的子类。
image showing console output http://img340.imageshack.us/img340/6184/pic3.png
正如您在屏幕截图中看到的那样,该项将显示,但由于无法访问outletlabelName,标签文本无法更改。
我还记录了我试图设置的名称,以确保它不是“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/

10-09 07:04