ios – 我的所有IBOutlet在viewDidLoad中都为零

我创建了一个UIViewController,我们可以调用MyViewController1.当我调用MyViewController1时,我的所有IBOutlet在viewDidLoad中都为零(而在其余的代码中).

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

如果我用另一个替换MyViewController1,例如MyViewController2,它可以工作.所以我猜这个问题真的在MyViewController1中.

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

谢谢你的帮助 !

编辑

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

// MySuperViewController1

MySuperViewController1.h

MySuperViewController1.m

MySuperViewController1.xib

// MyViewController1

MyViewController1.h

MyViewController1.m

所以笔尖属于超类,而不是子类.我能做到吗

解决方法

你应该使用:
MyViewController1 *vc = [[MyViewController1 alloc] initWithNibName:@"MyViewController1" bundle:nil]

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

编辑:

有两种可能的解决方案:

首先用超级nibName调用init

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

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

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

相关文章

UITabBarController 是 iOS 中用于管理和显示选项卡界面的一...
UITableView的重用机制避免了频繁创建和销毁单元格的开销,使...
Objective-C中,类的实例变量(instance variables)和属性(...
从内存管理的角度来看,block可以作为方法的传入参数是因为b...
WKWebView 是 iOS 开发中用于显示网页内容的组件,它是在 iO...
OC中常用的多线程编程技术: 1. NSThread NSThread是Objecti...