2009-05-27 1 views
2

私はUIViewControllerから継承するクラスを持っています。そこに、私はこのようないくつかのIVARの初期化をしたい:View Controllerがロードされたときに私のinitWithNibメソッドが呼び出されないのはなぜですか?

- (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; 
} 

私はペン先からロードされた内容を参照していますいくつかの理由。しかし、別の理由から、このイニシャライザは決して呼び出されません。私はログメッセージを得ることはありません。それのどこが悪いんだい?私は確かにペン先を持っているので、実際にはこれを呼び出さなければなりませんでした。

答えて

5

このメソッドは、UIViewControllerがペンで作成されている場合は使用されません。

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

initWithNibNameは、実際にコントローラでコードをインスタンス化する場合にのみ使用されます。

0

あなたはviewLoadedではなく、initWithNibNameと考えていると思います。 viewLoadedは、プログラムでビューを設定する場合に呼び出されるものです。あなたがペン先をロードしている場合は、initWithNibNameが呼び出されます。しかし、ビューの設定はviewDidLoadまで行うべきではありませんが、配列やその他の変数を設定するなど、他の初期設定をinitWithNibNameで行う必要があります。

関連する問題