在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上做啥[关闭]
在 init 中设置的属性在 viewDidLoad 之后是 nil 吗?
浅论ViewController的加载 -- 解决 viewDidLoad 被提前加载的问题(pushViewController 前执行)