我有一个继承自UIViewController的类。在那里,我想做一些像这样的ivar初始化:
- (id)initWithNibName:(NSString *)nibName bundle:(NSBundle *)nibBundle { // Load the view nib
NSLog(@"Hello Earth!");
if (self = [super initWithNibName:nibName bundle:nibBundle]) {
self.visibleIndex = 0;
NSLog(@"Hello Planet!");
}
return self;
}
出于某种原因,我确实看到了从笔尖加载的内容。但由于另一个原因,永远不会调用此初始化程序。我从来没有收到日志消息。这有什么问题?我肯定有一个笔尖,所以实际上这个必须被调用,对吧?
答案 0 :(得分:5)
如果您的UIViewController是由nib创建的,则不使用此方法。您需要覆盖viewDidLoad:
-(void) viewDidLoad {
[super viewDidLoad];
NSLog(@"Hello Planet");
}
仅当您实际通过代码实例化控制器时才使用initWithNibName。
答案 1 :(得分:0)
我认为你在考虑viewLoaded
,而不是initWithNibName
。如果要以编程方式设置视图,则调用viewLoaded。如果您正在加载笔尖,则会调用initWithNibName
....因此名称?但是在viewDidLoad
之前不应该设置视图,但是其他初始化内容应该在initWithNibName
中完成,例如,设置任何数组或其他变量。