我已經閱讀了一堆關於SO的答案,但我有點困惑。查看控制器,依賴注入和init/viewDidLoad
我有我創建的標籤欄控制器子類,並在其viewDidLoad,我創建每個視圖控制器。但是,我有一個依賴關係,我將它傳遞給父級,然後依次進入每個選項卡的視圖控制器。我使用自定義的init方法(頭文件中爲它聲明瞭NS_DESIGNATED_INITIALIZER)傳遞該依賴項。但是,它看起來像[super init]
直接觸發了viewDidLoad,因此在創建其他視圖控制器時依賴性設置不正確。
這裏是我的自定義init方法:
- (instancetype)initWithSession:(T2Session *)session
{
self = [super init];
if (self) {
_session = session;
}
return self;
}
我想session
由我創建視圖控制器的時間設置,但我有點困惑如何做到這一點的最好辦法是。任何意見非常感謝。提前致謝!
調用init不會導致調用viewDidLoad。第一個選項卡中的控制器會調用viewDidLoad方法,因爲選項卡欄控制器會將該控制器的視圖添加到其視圖中。除非您點擊其選項卡,否則其他控制器都不應調用viewDidLoad。 – rdelmar 2015-02-08 21:05:29
嗯......我在我的標籤欄控制器的viewDidLoad中設置了一個斷點,並且堆棧跟蹤直接指向了我的'self = [super init];'行... – Mason 2015-02-08 21:25:26
任何控制器中的Init都不應該直接導致視圖正在加載。在標籤欄控制器的情況下,它的視圖被系統加載(以某種方式),因爲它是窗口的rootViewController,並且導致調用viewDidLoad。 – rdelmar 2015-02-08 22:29:22