ボタンがあります。ボタンをクリックすると、新しいUITabBarController(ツールボックスで事前定義されている)が開きます。
これはコードです:
DealerView *view = [[DealerView alloc] initWithDealerId:976];
[self.navigationController pushViewController:view animated:YES];
ご覧のとおり、私は独自のカスタム初期化子を使用して、NSUInteger番号をUITabBarControllerに渡します。
UITabBarController内で、このID番号をすべての子(タブバーのすべてのタブ)に配布したいと思います。私はこのコードでこれを行います:
- (void)viewDidLoad
{
NSInteger i;
for (i = 0; i < [self.childViewControllers count]; i++){
DealerBaseView *item = (DealerBaseView*) [self.childViewControllers objectAtIndex:i];
item.dealerId = self->dealerId;
}
[super viewDidLoad];
// Do any additional setup after loading the view.
}
このようにして、各子ビューはこのID番号を使用して、独自のviewDidLoadメソッド内の正しいデータベース情報を取得できます。
問題は、self->dealerIdが常に0であるということです。
そこで、コード内にいくつかのブレークポイントを追加して、self-> DealerIdが常に0を返す理由を確認しました(初期化メソッドで設定されていることがわかります)。
- (id) initWithDealerId:(NSUInteger)i{
self = [super init];
if (self){
self->dealerId = i;
}
return self;
}
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
return self;
}
- (id) init{
self = [super init];
return self;
}
- (id) initWithCoder:(NSCoder *)aDecoder{
self = [super initWithCoder:aDecoder];
return self;
}
これで、この中の順序は次のようになります。
- initWithCoder-UITabBarController
- viewDidLoad-UITabBarController
- viewDidLoad-UITabBarControllerの子タブ
- initWithNibName-UITabBarController
- viewDidLoad-UITabBarController(2回目はこれにヒットします)
- initWithDealerId-UITabBarController
したがって、私のinitメソッドはこのシリーズで最後に呼び出されるため、dealerIdは常に0になります。
私の質問は単純です。UITabVarControllerアイテムとUITabVarControllerアイテム(タブコントローラー内のすべての子アイテム)の両方に対してviewDidLoadが呼び出されたときに使用できるようにdealerIdを設定するにはどうすればよいですか?