UIViewController と UITabBarController とでは loadView, viewDidLoaded のイベントのタイミングが違うみたい。
@interface MyViewController : UIViewController { } @end @implementation MyViewController - (id) init { NSLog(@"super init call!"); self = [super init]; if (self) { NSLog(@"init call!"); } return self; } - (void)loadView { [super loadView]; NSLog(@"loadView call!"); } - (void)viewDidLoad { [super viewDidLoad]; NSLog(@"viewDidLoad call!"); } @end
こんな感じのUIViewController の場合、
1. super init call!
2. init call!
3. loadView call!
4. viewDidLoad call!
の順番で呼ばれます。
... が 継承元を UITabBarController にした場合、つまり上記のコードでinterface部分を
@interface MyViewController : UITabBarController { } @endとした場合は、
1. super init call!
2. loadView call!
3. viewDidLoad call!
4. init call!
の順番で呼ばれるみたい。
なので、UITabBarController の init の所でプロパティの初期化をするようなコードを書いいると、
loadView のタイミングでは初期化されていない という状態になってしまいます。
Tabだからそういうもんかもしれないかもしれないけど、おかしい気もする。うーん ?
私的には
UITabBarControllerを継承してクラスは作成しない方向でこれからは組む
...と心に決めましたw