3

所以看起来我应该设置我的成员变量viewDidLoad- 但我对为什么设置这些变量initWithCoder失败感到困惑,因为两者都是在程序开始时调用的。

特别是我有一行代码:

[worldView setMapType:MKMapTypeSatellite];

其中worldView是一个IBOutlet MKMapView对象。它在 下工作viewDidLoad,但不是initWithCoder

4

2 回答 2

5

initWithCoder调用时插座尚未连接。从文档中:

在实例化过程中,存档中的每个对象都被取消存档,然后使用适合其类型的方法进行初始化。符合NSCoding协议的对象(包括 和 的所有子类UIViewUIViewController使用它们的 initWithCoder:方法进行初始化。
...
在所有对象都被实例化和初始化之后,nib 加载代码为所有这些对象重新建立出口和操作连接。然后它调用awakeFromNib对象的方法。

因此 awakeFromNib,这将是自定义设置 UI 元素的合适位置。

于 2013-12-09T20:52:22.653 回答
3

对象在被调用时还不存在initWithCoder,它们在viewDidLoad被调用时存在。initWithCoder通过注销使用以下内容的值来检查您的方法worldView

NSLog(@"World View: %@", worldView);

它会的nil。它们将在调用之前被初始化viewDidLoad,因此您可以在那里设置它的属性IBOutlet

于 2013-12-09T20:51:36.643 回答