Все мои IBOutlet равны нулю в viewDidLoad
Я создал UIViewController
, который мы можем назвать MyViewController1
. Когда я вызываю MyViewController1
, все мои IBOutlet
являются nil в viewDidLoad
(и в остальной части кода тоже).
Когда я создаю этот контроллер, выполнив
MyViewController1 *vc = [[MyViewController1 alloc] init]
,
если заменить MyViewController1
на другой, например MyViewController2
, он работает. Поэтому я думаю, что проблема действительно в MyViewController1
.
Последнее, что вы, возможно, захотите узнать, состоит в том, что MyViewController1
на самом деле является подклассом MySuperViewController1
, который является UIViewController
.
Спасибо за вашу помощь!
ИЗМЕНИТЬ
Я понял, что мое дело было более сложным. Вот мои точные файлы:
//MySuperViewController1
MySuperViewController1.h
MySuperViewController1.m
MySuperViewController1.xib
//MyViewController1
MyViewController1.h
MyViewController1.m
Итак, nib принадлежит суперклассу, а не подклассу. Могу ли я это сделать?
Ответы
Ответ 1
Вероятно, вы должны использовать:
MyViewController1 *vc = [[MyViewController1 alloc] initWithNibName:@"MyViewController1" bundle:nil]
вызов init
не приведет к совпадению с вашим xib файлом и не будет выделять ваши разности IBOutlet
ИЗМЕНИТЬ:
Существуют два решения:
Сначала вызывается init с супер nibName:
MyViewController1 *vc = [[MyViewController1 alloc] initWithNibName:@"MySUperViewController1" bundle:nil]
Второй вызов супер initWithNibName:
в методе дочернего init:
-(id)init {
if (self = [super initWithNibName:@"MySuperViewController1" bundle:nil]) {
// Init
}
return self;
}
Ответ 2
У меня была такая же проблема после того, как я сломал себе голову. Я понял, что именовать xib так же, как имя класса решает мою проблему.
Ответ 3
Проверьте, правильно ли привязан IBoulet с xib или нет. Также проверьте владельца файлов вашего xib.
Если имя вашего класса или имя xib изменены
Попытайтесь присвоить вам viewcontroller правильное имя xibName
MyViewController1 *vc = [[MyViewController1 alloc] initWithNibName:@"NibName" bundle:nil];