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

时间:2009-05-27 09:48:10

标签: 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]) {
        self.visibleIndex = 0;
        NSLog(@"Hello Planet!");
    }
    return self;
}

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

2 个答案:

答案 0 :(得分:5)

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

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

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

答案 1 :(得分:0)

我认为你在考虑viewLoaded,而不是initWithNibName。如果要以编程方式设置视图,则调用viewLoaded。如果您正在加载笔尖,则会调用initWithNibName ....因此名称?但是在viewDidLoad之前不应该设置视图,但是其他初始化内容应该在initWithNibName中完成,例如,设置任何数组或其他变量。