Все мои 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];