TabBarController がロードされると、含まれているすべての初期 viewController が初期化されます。ただし、それぞれのタブ項目に移動するまで、それらのビューは読み込まれません。そのため、この時点でビュー読み込みメソッド (viewDidLoad
など) でコードを実行することはできません。ただし、初期化メソッドの 1 つをオーバーライドすることでコードを実行できます。
ストーリーボードを使用している場合、viewController のアーカイブを解除するプロセスは、NIB がロードされたときにこのメソッドをトリガーします。
- (void) awakeFromNib
{
}
ストーリーボードを使用しない場合、この初期化子は NIB の読み込み前に呼び出されます。
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return self;
}
どちらの場合でも、これらのメソッドをオーバーライドしてコードを実行できます...
- (void) awakeFromNib
[super awakeFromNib];
[self.navigationController.tabBarItem
setBadgeValue:[NSString stringWithFormat:@"badgeValue"]]];
}
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
[self.navigationController.tabBarItem
setBadgeValue:[NSString stringWithFormat:@"badgeValue"]]];
}
return self;
}
ただし、データの取得元に注意する必要があります。この時点self.photos
で、たとえば初期化されていない可能性があります。このデータが userdefaults から取得されている場合は、ここにあるデータを読み取り、それに応じてバッジを設定できるはずです。