日々精進

新しく学んだことを書き留めていきます

ViewControllerの初期化とViewの初期化タイミング

ViewControllerの初期化ではまったのでメモ。
ViewControllerのコンストラクタ内でViewの初期化をしようとするとViewが初期化されなかった。
理由はコンストラクタ内ではまだViewにオブジェクトが詰められていないため。

- (id)initWithNibName:(NSString *)nibNameOrNil stock:(Stock*)stock
{
    self = [self initWithNibName:nibNameOrNil bundle:nil];
    self.stock = stock;
    self.stockNameLabel.text = self.stock.stockName; //self.stockNameLabelがまだnilなので初期化できない。が、エラーもでないのでわかりにくい
    return self;
}

viewWillAppearメソッドの中で初期化するのが正しい。

- (void)viewWillAppear:(BOOL)animated{
    self.stockNameLabel.text = self.stock.stockName;
    self.chartImageView.image = self.stock.chartImage;
    [super viewWillAppear:animated];
}

しかしnilに対してメソッドを読んでも例外が出ないのは何とかしてほしい。不具合の原因分析がしづらい。。