我所有的IBOutlet都是在viewDidLoad中

我创build了一个我们可以调用MyViewController1UIViewController 。 当我调用MyViewController1 ,我所有的IBOutletviewDidLoad (以及其他代码中)都是

当我通过做这个控制器
MyViewController1 *vc = [[MyViewController1 alloc] init]

如果我replaceMyViewController1另一个,例如MyViewController2 ,它的工作原理。 所以我想这个问题真的在MyViewController1

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

谢谢你的帮助 !


编辑

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

// MySuperViewController1

 MySuperViewController1.h MySuperViewController1.m MySuperViewController1.xib 

// MyViewController1

 MyViewController1.h MyViewController1.m 

所以笔尖属于超类,而不是子类。 我可以这样做吗?

你应该可以使用:

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

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

编辑:

有两种可能的解决scheme:

首先调用超级nibName的init:

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

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

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

我遇到同样的问题后,突然脑袋,我意识到命名xib相同的类名解决了我的问题。

检查IBoulet是否与xib链接正确。 同时检查你的xib文件的所有者。

如果您的类名称或xib名称已更改尝试使用正确的xibName来分配您的viewcontroller

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