我的viewDidLoad
在視圖控制器中被調用兩次。一次通過[UIViewController View]
,第二次通過[UINib instanciateWithOwner:Options]
。這是爲什麼發生?可以預防嗎?viewDidLoad被調用兩次
感謝
我的viewDidLoad
在視圖控制器中被調用兩次。一次通過[UIViewController View]
,第二次通過[UINib instanciateWithOwner:Options]
。這是爲什麼發生?可以預防嗎?viewDidLoad被調用兩次
感謝
你把viewDidLoad
內部的任何代碼應能與任何問題,運行多次。如果您的代碼只需要爲您的控制器運行一次,請使用-awakeFromNib
。原因是因爲視圖控制器的視圖可以卸載並加載多次。 viewDidLoad
中的代碼應該只修改UI以反映當前狀態。
現在我明白了,你的特定問題看起來是一個錯誤。請參閱Ned's answer。
您可能需要檢查對象構建機制。如果只有一個參考控制器的nib文件,則不應該多次調用此方法。 (除非對象正在重建)。
我想你可能必須在ViewDidLoad idemPotent中創建你的代碼。確保框架回調方法做出這個假設總是比較好的。
這是同樣的問題嗎?
Why is viewDidLoad called twice when the rootViewController property of UIWindow is set?
看起來它可能是在XCode中4的錯誤
+1它看起來就是那個bug! – Joe
有兩種可能性,因此這個問題在我的iOS設備經常發生。規則#1:不要在[init]函數中調用任何與視圖相關的設置,所有視圖相關的設置必須在viewDidLoad和viewWillAppear中完成。
規則2:檢查viewDidLoad和viewWillAppear,他們是否調用正確的超級函數?例如viewDidLoad - > super viewDidLoad等。
希望這會有所幫助。
在我的情況下,我在viewDidLoad中使用self.view(一次),同時在我的單元測試中調用viewDidLoad。這導致了兩個電話。但是,當我用[testedViewController視圖]替換[testedViewController viewDidLoad]時,雙重調用問題消失了。
好答案。但我不確定有關ViewDidLoad會被多次調用,除非有一些隱藏的引用。但我可能是錯的。 –
viewDidLoad將在需要視圖時自動調用,但不在那裏。如果視圖最初爲零,則使用'controller.view'或'[controller view]'會導致viewDidLoad被調用。如果未在instanciateWithOwner中設置視圖,或者之後卸載視圖,則可能是它再次被調用的原因。 – Joe