Я не думаю, что вам нужно вызывать awakeFromNib в вашем суперклассе.
Проверьте это .
Редактировать
Я только что провел быстрый тест, вот результаты:
Сценарий 1 :
MainWindow.Xib имеет подкласс UIViewController TestingAwakeFromNibViewController
, который имеет собственный Nib-файл TestingAwakeFromNibViewController.xib
.
TestingAwakeFromNibViewController имеет выход UIButton, называемый btn3.
Тестирование следующего кода:
- (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 в качестве сына в TestingAwakeFromNibViewController внутри MainWindow.Xib и добавление 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 даже не вызывается.
Так что, похоже, что разные сценарии требуют разных действий, и нам нужно подготовиться в соответствии с тем, по которому мы действуем.