【发布时间】: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,顾名思义,是在视图加载到内存后立即调用的,因此这是对视图进行额外设置的最佳位置。
标签: ios objective-c uiviewcontroller