Все мои IBOutlet равны нулю в viewDidLoad


Я создал UIViewController, который мы можем назвать MyViewController1. Когда я вызываю MyViewController1, все мои IBOutlet равны нулю в viewDidLoad (и в остальной части кода тоже).

Когда я создаю этот контроллер, делая
MyViewController1 *vc = [[MyViewController1 alloc] init],

Если я заменяю MyViewController1 на другой, например MyViewController2, это работает. Поэтому я думаю, что проблема действительно в MyViewController1.

Последнее, что вы, возможно, захотите узнать, это то, что MyViewController1 На самом деле является подклассом MySuperViewController1, который является UIViewController.

Спасибо за помощь !


EDIT

Я понял, что мой случай был, возможно, более сложным. Вот мои точные файлы:

/ / MySuperViewController1

MySuperViewController1.h

MySuperViewController1.m

MySuperViewController1.xib

/ / MyViewController1

MyViewController1.h

MyViewController1.m
Таким образом, перо принадлежит суперклассу, а не подклассу. Я могу это сделать ?
3 16

3 ответа:

Вероятно, вам следует использовать :

MyViewController1 *vc = [[MyViewController1 alloc] initWithNibName:@"MyViewController1" bundle:nil]

Вызов init не приведет к совпадению с вашим файлом xib и не выделит ваши различия IBOutlet

Правка:

Существует два возможных решения :

Первый вызов init с super nibName:

MyViewController1 *vc = [[MyViewController1 alloc] initWithNibName:@"MySUperViewController1" bundle:nil]

Второй вызов метода super initWithNibName: in child init:

-(id)init {
   if (self = [super initWithNibName:@"MySuperViewController1" bundle:nil]) {
        // Init
   }
   return self;
}

У меня была та же проблема после того, как после того, как я сломал голову, я понял, что называние xib так же, как имя класса, решило мою проблему.

Проверьте, правильно ли IBoulet связан с xib или нет. Также проверьте владельца файлов вашего xib.

Если ваше имя класса или имя xib изменено Попробуйте выделить вам viewcontroller с правильным именем xibName

MyViewController1 *vc = [[MyViewController1 alloc] initWithNibName:@"NibName" bundle:nil];