Objective-C iOS开发在设置variables时使用viewDidLoad或initWithCoder,为什么?
所以看来我应该在viewDidLoad
设置我的成员variables – 但我很困惑,为什么在initWithCoder
设置这些variables失败,因为都在程序的开始时被调用。
特别是我有一行代码:
[worldView setMapType:MKMapTypeSatellite];
其中worldView
是一个IBOutlet
MKMapView
对象。 它在viewDidLoad
下工作,但不是initWithCoder
。
当调用initWithCoder
时,这些对象还不存在,并且在调用viewDidLoad
时它们会执行。 检查你的initWithCoder
方法,通过注销worldView
的值使用类似的东西:
NSLog(@"World View: %@", worldView);
这将是nil
。 在调用viewDidLoad
之前,它们将被初始化,所以你可以在那里设置那个IBOutlet
的属性。
调用initWithCoder
时,sockets还没有连接。 从文档 :
在实例化过程中,归档中的每个对象都被解除存档,然后使用适合其types的方法进行初始化。 符合
NSCoding
协议(包括UIView
和UIViewController
所有子类)的对象使用它们的initWithCoder:
方法进行初始化。
…
在所有对象被实例化和初始化之后,nib加载代码重新build立所有这些对象的出口和动作连接。 然后调用对象的awakeFromNib
方法。
所以awakeFromNib
将是一个适合自定义UI元素设置的地方。