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因爲他們應該實現它

我修正了,我不知道,我需要聲明這些出口作爲視圖的屬性,包括綁定的一切似乎工作。