2009-08-05 4 views
3

App DelegateにはView Controllerのアウトレットプロパティがあり、View Controllerはペン先に作成されます。nibで初期化されたときに、どの初期化メソッドがUIViewControllerサブクラスで呼び出されますか?

- (id)initWithNibName:(NSString *)nibName bundle:(NSBundle *)nibBundle { 
    NSLog(@"iniwinib"); 
    if (self = [super initWithNibName:nibName bundle:nibBundle]) { 
     // do stuff 
    } 
    return self; 
} 

私も-initと試みたが、これはまた、コールを受信しません:ビューコントローラの-viewDidLoad方法Althoug

がロードされ、指定イニシャライザは何の呼び出しを受けていないようです。 NSLog出力はありません。この場合に使用しなければならない別のイニシャライザはありますか?

答えて

0

実際にコードのどこかにViewControllerを作成するためにinitWithNibNameを呼び出していますか?そうでなければ、呼び出されることはありません。このメソッドは自動的に呼び出されません。あなたのペンでviewControllerを作成するために、このメソッドを呼び出さなければなりません。しかし、このメソッドを呼び出す必要はありません。

+0

これはあなたが読者に非常に混乱するかもしれないと言ったところです。 NIBに格納されているオブジェクトには、initWithNibName:も送信する必要があります。それは真実ではない。 NIBに格納されたオブジェクトには、initWithNibName:は送信しないでください。 * NIBを所有する*オブジェクトのみがこれを送信する必要があります。 –

+0

well viewControllerはinitWithNibName intializerを持つ唯一のオブジェクトです – Daniel

+0

はい、ビューコントローラはNIBを所有できますが、NIBの内部に格納することもできます。 NIBにUIViewController(またはそのサブクラスのいずれか)を配置するときは、initWithNibName:を送信しないでください。 NIBインスタンス化されたオブジェクトには、初期化子を送信しないでください。 –

9

-initWithCoder:はこの場合の初期化子です(オブジェクトはNIBから逆シリアル化されているため)が、実際に必要なルーチンここは-awakeFromNibです。これは、NIBのすべてのオブジェクトが構築され、すべてのアウトレットが配線された後に呼び出されるものです。

関連する問題