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