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

Iphone 为什么在加载视图控制器时不调用我的initWithNib方法?,iphone,cocoa-touch,uikit,uiviewcontroller,nib,Iphone,Cocoa Touch,Uikit,Uiviewcontroller,Nib,我有一个从UIViewController继承的类。在这里,我想进行一些ivar初始化,如下所示: - (id)initWithNibName:(NSString *)nibName bundle:(NSBundle *)nibBundle { // Load the view nib NSLog(@"Hello Earth!"); if (self = [super initWithNibName:nibName bundle:nibBundle]) { sel

我有一个从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;
}

出于某种原因,我确实看到了从nib加载的内容。但是由于另一个原因,这个初始值设定项永远不会被调用。我从未收到日志消息。怎么了?我肯定有一个nib,所以实际上必须调用它,对吗?

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

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

initWithNibName仅在您实际通过代码实例化控制器时使用。

我认为您考虑的是
viewLoaded
,而不是
initWithNibName
。如果要以编程方式设置视图,则称为viewLoaded<如果使用nib加载,则会调用code>initWithNibName。。。。因此得名?但是视图的设置应该在
viewDidLoad
之前完成,但是其他初始化工作应该在
initWithNibName
中完成,例如,设置任何数组或其他变量