[英]viewDidLoad is called twice
我在視圖 controller 中的viewDidLoad
被調用了兩次。 一次是[UIViewController View]
,第二次是[UINib instanciateWithOwner:Options]
。 為什么會這樣? 可以預防嗎?
您放入viewDidLoad
中的任何代碼都應該能夠多次運行而不會出現任何問題。 如果您的代碼只需要為您的 controller 運行一次,請使用-awakeFromNib
。 原因是因為視圖controller的視圖可以多次卸載加載。 viewDidLoad
內部的代碼應該只修改 UI 以反映當前的 state。
現在我已經解決了這個問題,您的特定問題看起來是一個錯誤。 見內德的回答。
您可能需要檢查 object 構建機制。 如果只有一個nib文件參考controller,那么這個方法不應該多次調用。 (除非 object 正在重建)。
我認為您可能必須在 ViewDidLoad idemPotent 中編寫代碼。 確保框架回調方法做出這種假設總是更好。
有兩種可能性,這個問題經常發生在我的 iOS 設備中。
規則 #1:不要在 [init] function 中調用任何與視圖相關的設置,所有與視圖相關的設置都必須在 viewDidLoad 和 viewWillAppear 中完成。
規則 #2:檢查 viewDidLoad 和 viewWillAppear,它們是否調用了正確的超級 function? 例如 viewDidLoad -> 超級 viewDidLoad 等等。
希望這可以幫助。
就我而言,我在單元測試中調用 viewDidLoad 時在 viewDidLoad 中使用了 self.view (一次)。 這導致了兩個電話。 但是,當我將 [testedViewController viewDidLoad] 替換為 [testedViewController view] 時,雙重調用問題就消失了。
對此進行調試表明,@IBInspectable 再次調用了 viewDidLoad。 根 controller 是一個 UITabbarController。 @IBInspectable 正在設置 storyboard 中的選項卡。 不確定這是否是 UIKit 錯誤,但請嘗試檢查。 如果您的項目設置正確,則永遠不需要檢查 viewDidLoad 是否有雙重調用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.