我创建了UIViewController
,我们可以调用MyViewController1
。当我致电MyViewController1
时,IBOutlet
中viewDidLoad
的所有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属于超类,而不是子类。我能这样做吗?
答案 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
为您分配viewcontrollerMyViewController1 *vc = [[MyViewController1 alloc] initWithNibName:@"NibName" bundle:nil];