2008-09-17 60 views
7

我在Interface Builder文件中有兩個控件,每個控件都爲代碼創建了一個單獨的委託類(Control1Delegate和Control2Delegate)。我在界面構建器中創建了兩個「對象」,並將它們作爲這種類型,並將控件作爲代表連接到它們。代表們工作得很好。我的問題是,我需要將信息從一個代表分享給另一個代表,而我不知道如何。在Objective-C中連接委託類C

這樣做的最好方法是什麼?將兩個代表組合成一個類,或者以某種方式訪問​​他們都可以讀取的第三個類?由於我實際上並沒有在代碼中的任何地方初始化類,所以我不確定如何獲得對它的實際實例的引用(如果有實際的實例),甚至不能訪問「main」類該項目隨之而來。

回答

8

您可以將代理商的網點添加到其他代理商。有兩種方法的插座添加到IB的對象(假設你使用的Xcode/IB 3.0或更高版本:

  1. 如果您還沒有生成您的代理類的代碼還沒有,選擇所需的然後打開IB檢查器中的「Object Identity」選項卡,添加一個類型爲NSObject的「Class outlet」,然後可以將這個新的出口設置爲另一個委託,當然,您必須生成代碼你的委託類,並添加生成的源文件到你的Xcode項目之前,你可以加載筆尖

  2. 如果您已經生成委託類的代碼(或添加一個NSObject到您的NIB並將其類設置爲一個exis婷類Xcode項目),實例變量添加到委託類:

    IBOutlet id outletToOtherDelegate;

    只要你的Xcode項目是開放的(由綠色泡沫所示左下方的NIB窗口),IB將自動檢測新插座並允許您將其分配給NIB中的其他代表對象。

可可在NIB加載時自動連接這些插座。一旦awakeFromNib在您的委託對象的實例上被調用,您可能會認爲NIB中的所有其他對象已被實例化並且所有插座已連接。但是,您不應該假定要撥打awakeFromNib的訂單。

1

我認爲你可以在每個插座上創建插座並交叉綁定它們,以便它們每次都有相同的數據。如果他們需要共享一個模型對象,那就很整潔。我其實不知道該怎麼做;我想我一次在iPhone教程中看到它!

1

因爲我在工作中,我目前沒有我的Mac在我面前,但是是否可以將一個代表的實例綁定到另一個代表的成員?例如,這與將NSArrayController綁定到另一個控制器類的成員相似。

但是,根據委託類正在做什麼,如果任務是類似的,我可能會將它們組合成一次類。這將完全消除這個問題。