簡體   English   中英

從 Swift 初始化 obj viewcontroller 時未調用 viewDidLoad

[英]viewDidLoad not called when initialising obj viewcontroller from Swift

在我的 Swift 代碼中,我試圖實例化一個如下所示的 Objective-C 視圖控制器,但是沒有調用viewDidLoad方法。

let detailMessageVC = DetailMessageViewController(nibName:nil, bundle:nil)

如果我像這樣從 Objective-C 代碼實例化相同的視圖控制器,它確實會被調用。 視圖控制器沒有xib。

self.detailMVC = [[DetailMessageViewController alloc] init];

有誰知道為什么會這樣? 我希望在從 Swift 調用時具有相同的行為,因為我依賴viewDidLoad來執行各種初始化。 這是 Xcode 6.3.2

正如評論所述,視圖控制器的初始化與其viewDidLoad回調之間沒有聯系。

您甚至可以在 init 之前調用viewDidLoad 因為如果 ViewController 有效地加載了一個視圖,就會調用viewDidLoad

檢查那里: https : //stackoverflow.com/a/4862772/1486230

雖然,除非您知道將有效地顯示您的 ViewController,否則我不會依賴viewDidLoad 主要是通過使用myVC.view

試想一下,初始化一個 ViewController(它只是一個邏輯對象)與創建它的視圖是不同的。 出於性能原因,如果不需要,iOS 不會創建圖形對象。 如果您對 Swift 和 Objective-C 有所不同,那更多是因為 Swift 在優化方面可能更好。 但行為是正常的。

對於 iOS 9+,您可以調用vc.loadViewIfNeeded()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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