2

我有一个继承自 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;
}

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

4

2 回答 2

5

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

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

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

于 2009-05-27T12:08:44.480 回答
0

我想你是在想viewLoaded,不是initWithNibName。如果您想以编程方式设置视图,则调用 viewLoaded。initWithNibName如果您使用笔尖加载,则调用它....因此名称?但是视图的设置不应该在 之前完成viewDidLoad,但其他初始化工作应该在 中完成initWithNibName,例如,设置任何数组或其他变量。

于 2010-09-14T00:45:38.150 回答