UIViewController subclass init not called when loading from nib

I tried overriding the default initWithNibName designated initializer of a UIViewController subclass like so:

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
    if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) {
        // Custom initialization
    }
    return self;
}

I have also included its definition in the header file. However, when my Application Delegate nib loads the viewcontroller, the initializer is not invoked, only -viewDidLoad.

How does the nib magic instantiate my view controller then? Why do all the XCode templates state

// The designated initializer. Override if you create the controller programmatically and want to perform customization that is not appropriate for viewDidLoad.

Is it correct my initWithNibName isn't called when the viewcontroller is loaded form another nib?


You need to put your initialization code inside the awakeFromNib method for it to be run when loaded from Nib. The Nib file contains an archived version of the objects that it contains, so in principle, they do not need to be initialized again.

链接地址: http://www.djcxy.com/p/15376.html

上一篇: 如何在UIViewController中与UITableView交互?

下一篇: 从nib加载时未调用UIViewController子类init