2013-01-08 134 views
3

我正在構建一個Cocoa應用程序,該應用程序由一個分爲3個部分的窗口組成。每個部門都負責自己的業務,並且在桌面視圖,彈出按鈕等之間有大約30個控件。我從一個控制器開始,但事情變得非常容易,所以我決定在3控制器對象(視圖的每個部分)。然後我在Interface Builder上創建了NSObject參考,並連接了所有的出口,動作,數據源和代表。到現在爲止還挺好。可可應用程序在控制器之間傳遞對象

現在,三個部分將對象傳遞給對方,因此我需要一種方法將對象從一個類設置到另一個類。所討論的對象是一個類變量,但由於我沒有提及該對象,我不知道如何傳遞它。

有沒有辦法做到這一點,或者這只是整個錯誤的方法?

解決方案:

如塞爾吉奧評價之一如下所述,溶液似乎是創建每個控制器作爲IBOutlet中內,然後在Xcode界面生成器鏈接弱引用到另一控制器控制器對象一起。因此,現在每個控制器都可以訪問參考控制器的公開方法和變量。

+0

是的,一個完整的MVC可以永遠是另一個MVC中的「視圖」。 –

回答

2

現在,三個部分將對象傳遞給對方,因此我需要一種方法來將對象從一個類設置到另一個類。所討論的對象是一個類變量,但由於我沒有提及該對象,我不知道如何傳遞它。

您的設計中似乎缺少的是模型(如Model-View-Controller)。這將是封裝應用程序所有狀態的類,即使它是暫時狀態,以便每個受影響的對象都有權訪問它。

這樣一個模型類的一個簡單的實現是單例,所以它可以在所有的控制器中使用。有一個look here關於在Objective-C中實現單例的一些想法。

一旦你有你的模型類,你的控制器可以訪問它像這樣,例如:

[MyModel sharedModel].myObject = ...; 

這種做法是很好的,海事組織,如果它是有道理的,你在創建模型的方向走爲您的設計。這取決於您的控制器共享的對象的語義。所以,可能有更好的替代解決方案適合你的情況。例如,一個控制器可以是共享對象的所有者,另外兩個控制器可以在初始化時接收對第一個控制器的引用,以便他們可以訪問其公共屬性。

+0

我有一個模型,實際上是一個單身人士,但它是持有對2個控制器的引用的nib文件,所以我不知道如何在模型中實例化(或引用)它們。我猜是我缺少的部分。如果我可以在2個控制器上掛起一個地方,那麼我可以輕鬆地設置一個代表彼此之間的代理來傳遞這些對象。任何想法? – cescofry

+1

不應該是引用模型的兩個控制器?關於筆尖的事情,那麼爲您的筆尖所有者定義兩個插座並將它們連接到IB的2控制器上呢? – sergio

+0

它就在那裏。這工作像一個魅力。你想把它作爲答案來加以處理,這樣我就可以接受它。 – cescofry

相關問題