UIviewcontroller - 啥时候实例化视图属性?
Posted
技术标签:
【中文标题】UIviewcontroller - 啥时候实例化视图属性?【英文标题】:UIviewcontroller - what time is the view property instantiated?UIviewcontroller - 什么时候实例化视图属性? 【发布时间】:2014-11-03 13:13:18 【问题描述】:我想知道 UIViewController 的 .view 属性究竟是什么时候创建的。
我创建了一个 ViewController,并在 init(coder: aDecoder) 中开始设置一些变量。当我尝试设置 viewController.view.backgroundColor 它崩溃了。 我在 viewDidLoad 中放置了相同的代码行,它工作了。
这是我的代码
class WebViewController: UIViewController
override func viewDidLoad()
super.viewDidLoad()
println("didload")
self.view.backgroundColor = UIColor.redColor()
required init(coder aDecoder: NSCoder)
println("init Coder")
super.init(coder: aDecoder)
self.tabBarItem.title = nil
//self.view.backgroundColor = UIColor.redColor() // CAUSE CRASH
这是错误:
Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Could not load NIB in bundle: 'NSBundle </Users/Mari/Library/Developer/CoreSimulator/Devices/A9CC10D9-409E-4604-A6F7-B3729E0B3D52/data/Containers/Bundle/Application/F5DFDFE6-87B9-40AF-A26B-7B5A1506D203/test.app> (loaded)' with name '9pv-A4-QxB-view-tsR-hK-woN''
在初始化编码期间,VC 被实例化,可以设置标签栏,因为它来自根视图控制器(标签栏控制器),但视图是 VC 的属性,所以在初始化期间,仍然不是准备好设置。我对吗?
所以... view 属性何时被精确实例化? 设置它的最佳时机是什么时候?
【问题讨论】:
viewDidLoad,顾名思义,是在视图加载到内存后立即调用的,因此这是对视图进行额外设置的最佳位置。 【参考方案1】:视图在 initializer(在您的情况下为 init(coder aDecoder: NSCoder)
)和 viewDidLoad
之间实例化。
在此期间,ios 会从您的 IB 文件加载 UI 组件。作为开发人员,您可以在 viewDidLoad
中自定义视图(例如通过更改颜色)。
您可以在documentation 中了解有关视图控制器生命周期的更多信息。
【讨论】:
以上是关于UIviewcontroller - 啥时候实例化视图属性?的主要内容,如果未能解决你的问题,请参考以下文章
Javascript 中数组与对象的实例化。数组啥时候是对象,啥时候得到数组的方法?
无需 nib 以编程方式实例化 UIViewController