我的所有IBOutlet在viewDidLoad中都是nil

时间:2014-02-12 08:49:05

标签: ios uiviewcontroller iboutlet

我创建了UIViewController,我们可以调用MyViewController1。当我致电MyViewController1时,IBOutletviewDidLoad的所有MyViewController1 *vc = [[MyViewController1 alloc] init] (在其他代码中也是如此)。

当我通过执行制作此控制器时 MyViewController1

如果我将MyViewController2替换为另一个MyViewController1,例如MyViewController1,则可行。所以我想问题实际上在MySuperViewController1

您可能想知道的最后一件事是UIViewController实际上是MySuperViewController1.h MySuperViewController1.m MySuperViewController1.xib 的子类MyViewController1.h MyViewController1.m

感谢您的帮助!


修改

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

// MySuperViewController1

{{1}}

// MyViewController1

{{1}}

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

3 个答案:

答案 0 :(得分:13)

您应该使用:

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

调用init将不会与您的xib文件匹配,也不会分配您的差异IBOutlet

编辑:

有两种可能的解决方案:

首先使用超级nibName调用init:

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

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

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

答案 1 :(得分:3)

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

答案 2 :(得分:0)

检查IBoulet是否与xib正确链接。另请检查xib的文件所有者。

如果您的班级名称或xib名称已更改 尝试使用适当的xibName

为您分配viewcontroller
MyViewController1 *vc = [[MyViewController1 alloc] initWithNibName:@"NibName" bundle:nil];