所以我似乎应该在viewDidLoad
中设置我的成员变量,但我很困惑为什么在initWithCoder
中设置这些变量失败,因为两者都是在程序开始时调用的。
特别是我有一行代码:
[worldView setMapType:MKMapTypeSatellite];
其中worldView
是IBOutlet
MKMapView
对象。它可以在viewDidLoad
下工作,但不能在initWithCoder
下工作。
调用initWithCoder
时,插座尚未连接。来自文件:
在实例化过程中,归档中的每个对象未进行初始化,然后使用与其类型相匹配的方法进行初始化。符合
NSCoding
协议的对象(包括所有UIView
和UIViewController
的子类)使用它们的CCD_ 12方法
…
在所有对象之后已经实例化和初始化,nib加载代码为所有这些重新建立出口和行动连接对象。然后它调用对象的awakeFromNib
方法。
因此awakeFromNib
将是一个适合自定义设置UI元素的地方。
调用initWithCoder
时对象还不存在,调用viewDidLoad
时对象存在。通过使用以下内容注销worldView
的值来检查您的initWithCoder
方法:
NSLog(@"World View: %@", worldView);
并且它将是CCD_ 19。它们将在调用viewDidLoad
之前初始化,因此您可以在那里设置该IBOutlet
的属性。