0

ボタンがあります。ボタンをクリックすると、新しい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;
}

これで、この中の順序は次のようになります。

  1. initWithCoder-UITabBarController
  2. viewDidLoad-UITabBarController
  3. viewDidLoad-UITabBarControllerの子タブ
  4. initWithNibName-UITabBarController
  5. viewDidLoad-UITabBarController(2回目はこれにヒットします)
  6. initWithDealerId-UITabBarController

したがって、私のinitメソッドはこのシリーズで最後に呼び出されるため、dealerIdは常に0になります。

私の質問は単純です。UITabVarControllerアイテムとUITabVarControllerアイテム(タブコントローラー内のすべての子アイテム)の両方に対してviewDidLoadが呼び出されたときに使用できるようにdealerIdを設定するにはどうすればよいですか?

4

1 に答える 1

0

問題は、2つの異なるDealerViewオブジェクトを2つの異なる方法で作成していることであるように見えます。1つはxibまたはストーリーボードから、もう1つはコードで作成しています。さまざまなinitメソッドでselfの値をNSLogすると、さまざまなオブジェクトを示すさまざまなアドレスが表示されると思います。イベントの単一のシーケンスとして表示されるものは、実際にはそうではありません。

初期化の質問に対する答えは、1つのオブジェクトのみを使用することです。

于 2012-07-11T15:50:46.097 に答える