在viewDidLoad之前编写init方法将模型传递给视图控制器[重复]

Posted

技术标签:

【中文标题】在viewDidLoad之前编写init方法将模型传递给视图控制器[重复]【英文标题】:Write init method to pass model to view controller before viewDidLoad [duplicate] 【发布时间】:2017-10-11 16:09:13 【问题描述】:

我不熟悉情节提要,我有 UIViewController 的超类,它有这样的 init 方法:

 convenience init(viewModel: Any)
        self.init()
        self.viewModel = viewModel
    

所以,当viewDidLoad 被调用时,我已经有了不为零的viewModel。

我可以很容易地用这样的模型创建视图控制器:

let pvc = ProductViewController(viewModel: pvm)
self.navController?.pushViewController(pvc, animated: true)

如何将此功能添加到情节提要?我想要的是,将模型传递给构造函数,以确保在调用 viewDidLoad 时模型存在。

【问题讨论】:

viewDidLoad之前为什么要传模型?我了解在 macOS 中,Cocoa 绑定在初始化后立即期望值。但是 ios 中的哪些功能需要 viewDidLoad 之前的有效值?共享类(单例)不是一个选项吗? 【参考方案1】:

不幸的是,故事板无法做到这一点,因为视图控制器是预先初始化的。

不过,我写了一个 post 来让视图控制器和视图模型关联更加明确。

【讨论】:

您的解决方案很棒!

以上是关于在viewDidLoad之前编写init方法将模型传递给视图控制器[重复]的主要内容,如果未能解决你的问题,请参考以下文章

在 viewDidLoad 之前调用 ViewController 上的自定义 init 方法

在 didSelectRowAtIndexPath 之前调用 viewDidLoad

在-init,-viewdidload,-viewdidappear,-viewdiddisapper上做啥[关闭]

在 viewDidLoad 之前延迟表视图加载或加载数组?

在 init 中设置的属性在 viewDidLoad 之后是 nil 吗?

浅论ViewController的加载 -- 解决 viewDidLoad 被提前加载的问题(pushViewController 前执行)