我尝试覆盖UIViewController子类的默认initWithNibName指定初始化器,如下所示:
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) {
// Custom initialization
}
return self;
}
我还在头文件中包含了它的定义。但是,当我的Application Delegate nib加载viewcontroller时,不调用初始化程序,只调用-viewDidLoad。
nib magic如何实例化我的视图控制器呢?为什么所有XCode模板都说明
//指定的初始化程序。如果以编程方式创建控制器并希望执行不适合viewDidLoad的自定义,则覆盖。
当从另一个nib加载viewcontroller时,我的initWithNibName是否正确?
答案 0 :(得分:17)
您需要将初始化代码放在awakeFromNib
方法中,以便在从Nib加载时运行它。 Nib文件包含它包含的对象的存档版本,因此原则上它们不需要再次初始化。