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

Tha*_*nks 2 iphone cocoa-touch uiviewcontroller uikit nib

我有一个继承自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;
}
Run Code Online (Sandbox Code Playgroud)

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

Gar*_*vis 5

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

-(void) viewDidLoad {
    [super viewDidLoad];
    NSLog(@"Hello Planet");
}
Run Code Online (Sandbox Code Playgroud)

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