我的專案(Mojave,XCode10)中有一些奇怪的東西,或者我缺少一些非常基本的東西。
這是我的全部代碼:
import Foundation
import Cocoa
class ViewController: NSViewController {
public init () {
super.init(nibName: nil, bundle: nil)
self.view = ConfigView(rect: NSRect(x: 0, y: 0, width: 400, height: 300))
print("2")
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override func loadView() {
super.loadView()
print("3")
}
override func viewDidLoad() {
super.viewDidLoad()
print("4")
}
override func viewWillAppear() {
super.viewWillAppear()
print("5")
}
override func viewDidAppear() {
super.viewDidAppear()
print("6")
print("Is loaded: \(isViewLoaded)")
}
}
class ConfigView: NSView {
public init(rect: NSRect) {
super.init(frame: rect)
print("1")
}
required public init?(coder decoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
我想在viewDidLoad()方法中設定東西,但從未呼叫過此方法。控制臺顯示:
1 2 5 6 已加載:true
所以,顯然loadView()并viewDidLoad()沒有被呼叫,但是后來當視圖出現時isViewLoaded()顯示為真。
為什么這個生命周期方法被忽略了?
uj5u.com熱心網友回復:
我懷疑這里發生的事情是,由于您正在初始化函式中的view屬性,因此init在loadView()呼叫時,它會檢測到視圖已經加載,因此不會呼叫viewDidLoad().
您是否嘗試將視圖實體化放入loadView()函式而不是init? 無論如何,我不建議在init函式中創建視圖。
uj5u.com熱心網友回復:
如果你執行loadView,你不能呼叫super。您必須創建一個視圖并將其分配為self.view. 解決這個問題,一切都會好起來的。當然,在現實生活中,您永遠不會實施loadView,所以這一切都是學術性的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/314773.html
