我的所有IBOutlet在viewDidLoad中都是nil

Nic*_*Roy 16 uiviewcontroller iboutlet ios

我创造了一个UIViewController我们可以打电话的人MyViewController1.当我打电话MyViewController1,我所有的IBOutletARE viewDidLoad(以及其他代码太).

当我通过这样做创建这个控制器时
MyViewController1 *vc = [[MyViewController1 alloc] init],

MyViewController1例如MyViewController2,如果我替换另一个,它就可以了.所以我猜问题确实存在MyViewController1.

你可能想知道的最后一件事,就是MyViewController1实际上是一个子类,MySuperViewController1这是一个UIViewController.

谢谢你的帮助 !


编辑

我意识到我的情况可能更复杂.这是我的确切文件:

// MySuperViewController1

MySuperViewController1.h

MySuperViewController1.m

MySuperViewController1.xib
Run Code Online (Sandbox Code Playgroud)

// MyViewController1

MyViewController1.h

MyViewController1.m
Run Code Online (Sandbox Code Playgroud)

所以nib属于超类,而不是子类.我能这样做吗?

KID*_*dAe 13

您应该使用:

MyViewController1 *vc = [[MyViewController1 alloc] initWithNibName:@"MyViewController1" bundle:nil]
Run Code Online (Sandbox Code Playgroud)

调用init不会与你的xib文件匹配,也不会分配你的不同IBOutlet

编辑:

有两种可能的解决方案:

首先用超级nibName调用init:

MyViewController1 *vc = [[MyViewController1 alloc] initWithNibName:@"MySUperViewController1" bundle:nil]
Run Code Online (Sandbox Code Playgroud)

第二个是initWithNibName:在子init方法中调用super :

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