簡體   English   中英

viewDidLoad 被調用兩次

[英]viewDidLoad is called twice

我在視圖 controller 中的viewDidLoad被調用了兩次。 一次是[UIViewController View] ,第二次是[UINib instanciateWithOwner:Options] 為什么會這樣? 可以預防嗎?

您放入viewDidLoad中的任何代碼都應該能夠多次運行而不會出現任何問題。 如果您的代碼只需要為您的 controller 運行一次,請使用-awakeFromNib 原因是因為視圖controller的視圖可以多次卸載加載。 viewDidLoad內部的代碼應該只修改 UI 以反映當前的 state。

現在我已經解決了這個問題,您的特定問題看起來是一個錯誤。 內德的回答

這是同樣的問題嗎?

為什么設置 UIWindow 的 rootViewController 屬性時 viewDidLoad 會被調用兩次?

看起來這可能是 XCode 4 中的錯誤。

您可能需要檢查 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM