3

在Xcode 3.1.2我用来加载NSCollectionViewItem的笔尖在我的NSCollectionViewItem子类是这样的:NSCollectionView在10.6/3.2的Xcode

-(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中使用的笔尖,但似乎Apple不这么认为。

我看过了文档中提供的示例,但NSCollectionViewItem使用initWithNibName以编程方式实例化,但我想在IB中创建它。

UPDATE

我做了什么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

我也绑定了NSCollectionViewitemPrototypeNSCollectionViewItem(PersonController)的子类。

image showing bindings http://img503.imageshack.us/img503/4672/pic2d.png

现在PersonView.nibFile's OwnerNSCollectionView点到我的子类的itemPrototype

image showing console output http://img340.imageshack.us/img340/6184/pic3.png

正如你在截图中看到的项目都显示,但由于出口labelName是无法访问的标签的文本不能改变。

我还记录了我想要设置的名称,以确保它不是'名称'。

需要做些什么来改变标签的价值?

任何帮助,将不胜感激。

回答

4

是的,雪豹使这更容易。在IB中,单击NSCollectionViewItem并设置nib名称和包名称(对于主包,请将其留空)。在您的PersonView笔尖中,使NSCollectionViewItem成为文件的所有者并将-view插口连接到该笔尖中的视图。(它看起来像你可能已经在那个笔尖中设置了这个)。其他一切都应该是自动的,并且覆盖copyWithZone:不应该是必需的。

+0

谢谢。它现在显示出来了,但我无法访问绑定到包含项目视图的笔尖的FileOwner的插口。我现在也必须以不同的方式做到这一点吗? – 2009-09-27 20:45:25

+0

我不确定你的意思。你能详细说明吗? – kperryua 2009-09-27 20:59:44

+0

我编辑了我的答案,向你展示我的意思。 – 2009-09-27 21:01:04

0

要将representedObject的属性与IB元素的值同步,您可能需要使用可可绑定。在此情况下,将文本字段的值绑定到文件的所有者模型关键路径representedObject.name

我曾与10.6 Xcode 3.2 工作,但什么不能工作是你做了什么:将IB元素连接到我的CollectionViewItem的出口。我有一个CollectionViewItem的自定义子类和一切设置,你有。但在运行应用程序时,它未能说明

[的NSTextField copyWithZone:]:无法识别的选择发送到实例0x210a60 2009-10-19 13:05:18.772 WrapperTest [24122:A0F]未捕获的异常升高 2009-10-19 13:05:18.774 WrapperTest [24122:a0f] - [NSTextField copyWithZone:]:无法识别的选择器已发送到实例0x210a60 2009-10-19 13:05:18.779 WrapperTest [24122:a0f] ***终止应用程序由于未捕获的异常'NSInvalidArgumentException',原因:' - [NSTextField copyWithZone:]:无法识别的选择器发送到实例0x210a60' ***一次调用堆栈: ( 0 CoreFound通货膨胀0x977f658a __raiseError + 410 1 libobjc.A.dylib 0x9767ff49 objc_exception_throw + 56 2的CoreFoundation 0x978429db - [NSObject的(NSObject的)doesNotRecognizeSelector:] + 187 3的CoreFoundation 0x9779e026 ___forwarding___ + 950 4的CoreFoundation 0x9779dbf2 _CF_forwarding_prep_0 + 50 5的CoreFoundation 0x97789a5a - [NSObject的(NSObject的)复制] + 42 6 AppKit的0x918ce1d7 - [NSViewController的setTitle:] + 70 7 AppKit的0x91167dab - [NSNibOutletConnector establishConnection] + 406 ...

我不知道为什么这些NSTextFields是错过了copyWithZone因为他们应该实现它

我修正了,我不知道,我需要声明这些出口作为视图的属性,包括绑定的一切似乎工作。