2011-07-06 67 views
2

這是一個關於最佳實踐的問題。在界面生成器和模塊化中使用'外部對象'

我有一個使用標準iOS選項卡控制器的應用程序。

我想要做的事情之一是將XIB分成不同的文件。我可以通過在每個選項卡控制器的「NIB名稱」部分中指定'child'XIB來實現此目的。到現在爲止還挺好。

在這個應用程序中,我有一個幾乎所有的UIViewControllers(例如:提供Web服務調用)都使用的對象。我們稱之爲MyServices。

在單個XIB解決方案中,我可以將對象拖到Objects列表上,將類型設置爲「MyServices」。我可以在每個ViewController中聲明一個MyServices *類型的IBOutlet,並將它們連接在一起。這很好地工作。但是,如果我將視圖移出到單獨的XIB,則需要訪問MyServices對象的任何進一步向下的堆棧的控制器都是不幸的,因爲對象不再存在於該XIB中以便執行接線。

我希望能夠做的是聲明一個'外部對象',然後連線。但是我看不到''parent'XIB中的MyServices對象作爲'XIB'中的'external'對象的'傳遞'方式。

這只是在IB不支持?什麼是最好的選擇?

我無法在控制器中指定XIB名稱,並且可能在運行時以編程方式創建它(推測使用某種loadFromNib代碼聲明瞭提供外部對象的字典)。這確實意味着這樣做的控制器必須知道MyServices,即使它不直接使用它。

另外,我可以在每個UIViewController中有一個'dataProvider',所以不用直接將MyServices設置爲IBOutlet,它可以做[dataProvider getServices]。再次,必須連接到可以做到這一點的東西 - 這限制了XIB可以分解的地方。它感覺有點不必要的冗長..

這裏的最佳做法是什麼?

回答

0

它看起來像使用外部對象,你把對象實例化回自己手中,你也必須手動實例化NIB。至少這就是我從How to use a common target object to handle actions/outlets of multiple views?

Can I use Interface Builder to inject dependencies across multiple nibs?的答案中收集到的問題向您提出非常類似的問題,也沒有真正的解決方案。

How do I set up a proxy object in the main application NIB?作者也放棄了使用Interface Builder作爲依賴注入工具的想法。

所以我猜想我們這些爪哇移民在這裏對着無形的牆壁猛撞我們的頭。我們使用的隱喻來塑造我們頭腦中的代碼(以及我們已經認識並與質量相關的代碼質量),並不適用於Objective-C。這可能是因爲我們不熟悉Obj-C成語。或者可能是,我們正在處理語言和社區發展的不同演化階段(例如,看Obj-C中TDD實踐的驚人不成熟)。在我認真對待它的9個月裏,我個人並沒有在Obj-C世界中看到很多最佳實踐