为什么我的initWithNib方法在视图控制器加载时不被调用?

问题描述:

我有一个继承自UIViewController的类。在那里,我想作出一些伊娃初始化是这样的:为什么我的initWithNib方法在视图控制器加载时不被调用?

- (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; 
} 

出于某种原因,我看到从笔尖加载的内容。但是由于另一个原因,这个初始化器永远不会被调用。我从来没有得到日志消息。那有什么问题?我肯定有一个笔尖,所以实际上这必须被调用,对吧?

如果您的UIViewController是由nib创建的,则不使用此方法。您需要覆盖viewDidLoad:

-(void) viewDidLoad { 
    [super viewDidLoad]; 
    NSLog(@"Hello Planet"); 
} 

initWithNibName仅用于通过代码实际实例化控制器的情况。

我认为你在考虑viewLoaded而不是initWithNibName。如果你想以编程方式设置视图,viewLoaded就是所谓的。如果您正在加载一个笔尖,则会调用initWithNibName ....因此名称?但是直到viewDidLoad才能完成视图的设置,但其他初始化的东西应该在initWithNibName中完成,例如,设置任何数组或其他变量。