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