首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >未调用viewDidLoad()

未调用viewDidLoad()
EN

Stack Overflow用户
提问于 2021-10-13 22:10:36
回答 2查看 46关注 0票数 1

要么是我的项目(Mojave,XCode10)中有一些奇怪的东西,要么是我错过了一些非常基本的东西。

这是我的全部代码:

代码语言:javascript
复制
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。

为什么该生命周期方法被忽略?

EN

回答 2

Stack Overflow用户

发布于 2021-10-13 22:27:50

我怀疑这里发生的情况是,由于您正在初始化init函数中的view属性,因此当调用loadView()时,它会检测到视图已经加载,因此不会调用viewDidLoad()

您是否尝试过将视图实例化放入loadView()函数而不是init中?在任何情况下,我都不建议在init函数中创建视图。

票数 1
EN

Stack Overflow用户

发布于 2021-10-13 22:53:29

如果实现loadView,则不能调用super。您必须创建一个视图并将其指定为self.view。解决这个问题,一切都会好起来的。当然,在现实生活中,您永远不会实现loadView,所以所有这些都是理论上的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69562923

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档