要么是我的项目(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()显示为true。
为什么该生命周期方法被忽略?
发布于 2021-10-13 22:27:50
我怀疑这里发生的情况是,由于您正在初始化init函数中的view属性,因此当调用loadView()时,它会检测到视图已经加载,因此不会调用viewDidLoad()。
您是否尝试过将视图实例化放入loadView()函数而不是init中?在任何情况下,我都不建议在init函数中创建视图。
发布于 2021-10-13 22:53:29
如果实现loadView,则不能调用super。您必须创建一个视图并将其指定为self.view。解决这个问题,一切都会好起来的。当然,在现实生活中,您永远不会实现loadView,所以所有这些都是理论上的。
https://stackoverflow.com/questions/69562923
复制相似问题