2011-03-17 65 views
5

我習慣從外面爲我的對象提供依賴關係。界面生成器是一個工具,可以幫助做到這一點,但我不能讓它適用於多個筆尖。只要我將主要的筆尖分解成更多的文件,我就不能再在不同的筆尖中的對象之間建立連接。使用文件所有者並沒有什麼幫助,因爲它只允許我將一個單獨的對象傳遞給一個筆尖。我可以使用Interface Builder在多個筆尖之間注入依賴性嗎?

實施例:

enter image description here

這裏A和B是一些較高級別的對象C和d某種較低級別的服務。只要所有的物體都在一個大筆尖內(第一張圖片),一切都很好。但是,當我將筆尖拆分爲A和B時,我無法將它們連接到C和D.(顯然,我不想創建C和D的兩個實例,我希望A和B都使用相同的C和D進行交談沒有使用單身)。

在接口構建器中可以這樣做嗎?怎麼樣?

回答

2

您的.nib中的對象對應於您的視圖圖層,對不對?在未歸檔時,它們由您選擇的控制器擁有,該控制器在您的服務和您的視圖之間進行調解。

在你的.nib文件中存在任何種類的低級別服務或任何類型的依賴關係都是非常規的。

+0

他們不只是看法,我也有我的筆尖控制器和模型。這可能是因爲Interface Builder並沒有被設計用於這種方式(畢竟它是* Interface * Builder),但是掛鉤整個對象圖很容易,我無法抗拒。我唯一需要解決的問題就是拆分筆尖。 – zoul 2011-03-20 08:34:47

+0

你是對的,Interface Builder並沒有被設計用於這種方式。你看過核心數據嗎?保持你的nib文件嚴格適合你的觀點,併爲你的模型使用核心數據 - 你會更快樂。 – hooleyhoop 2011-03-20 09:47:49

+0

Core Data真的適合這裏嗎?請注意,我*不*創建一些使用IB的數據的OO數據庫,我只是用它來建立我的對象之間的依賴關係。像'SettingsController'取決於'SettingsWindow'和'Settings'模型,'Settings'模型取決於一些用戶的默認設置,等等。 – zoul 2011-03-20 10:13:08

0

您應該使用外部對象。在你的xib中添加外部對象。你可以在對象庫中找到它。用它作爲普通對象(插座等)。既然有一個外部對象,它不會通過解壓過程創建,你應該創建自己。然後你編程方式加載你的筆尖:

NSArray* topLevelObjs = nil; 
NSDictionary* proxies = [NSDictionary dictionaryWithObject:self forKey:@"AppDelegate"]; 
NSDictionary* options = [NSDictionary dictionaryWithObject:proxies forKey:UINibExternalObjects]; 
topLevelObjs = [[NSBundle mainBundle] loadNibNamed:@"Main" owner:self options:options]; 

更多關於筆尖文件:https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/LoadingResources/CocoaNibs/CocoaNibs.html#//apple_ref/doc/uid/10000051i-CH4-SW24

相關問題