我认为你不必在你的超级类上调用 awakeFromNib 。
检查这个。
编辑
我刚刚做了一个快速测试,结果如下:
场景 1:MainWindow.Xib 有一个 UIViewController 子类TestingAwakeFromNibViewController
,它有自己的 Nib 文件TestingAwakeFromNibViewController.xib
。
TestingAwakeFromNibViewController 有一个名为 btn3 的 UIButton Outlet。测试以下代码:
- (void)viewDidLoad
{
[super viewDidLoad];
NSLog(@"Btn3 %@",btn3);
NSLog(@"viewDidLoad");
}
-(void) awakeFromNib
{
[super awakeFromNib];
NSLog(@"Btn3 %@",btn3);
NSLog(@"awakeFromNib");
}
将打印:
Btn3 (null)
AwakeFromNib
Btn3 <UIRoundedRectButton: 0x64088e0; frame = (114 211; 72 37); opaque = NO; autoresize = RM+BM; layer = <CALayer: 0x6408890>>
ViewDidLoad
场景 2:
删除 xib 文件,将 UIView 作为子添加到 MainWindow.Xib 内的 TestingAwakeFromNibViewController,并将 UIButton 作为子视图添加到 UIView(并将 UIbutton 出口连接到 TestingAwakeFromNibViewController 的适当出口)。
现在运行上面的代码将打印:
Btn3 <UIRoundedRectButton: 0x4e31c30; frame = (114 211; 72 37); opaque = NO; autoresize = RM+BM; layer = <CALayer: 0x4e31be0>>
viewDidLoad
Btn3 <UIRoundedRectButton: 0x4e31c30; frame = (114 211; 72 37); opaque = NO; autoresize = RM+BM; layer = <CALayer: 0x4e31be0>>
awakeFromNib
意思是 ViewDidLoad 在 AwakeFromNib 之前。
第三个场景:和第二个一样,只是没有调用[super awakeFromNib];
Btn3 <UIRoundedRectButton: 0x4e0ddf0; frame = (114 211; 72 37); opaque = NO; autoresize = RM+BM; layer = <CALayer: 0x4e0dda0>>
awakeFromNib
现在 ViewDidLoad 甚至没有被调用。
所以,似乎不同的场景需要不同的行动,我们需要根据我们正在采取的行动做好准备。