ユーザーが別画面で情報編集後、一覧画面のテーブルビューを更新したいことがあります。
テーブルビュー側の viewWillAppear で reloadData を実行すればテーブルが更新されますが、
[super viewWillAppear:animated]との順番によって動作が変わる点に注意しなくてはなりません。
<NGの例>
- (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; [self.tableView reloadData]; }
一見よさそうですが、以下の2点で問題があります。
・ビューの最初の読み込み時に、numberOfSectionsInTableView が重複して呼ばれてしまう
・他のビューから戻ってきた時に、numberOfSectionsInTableView や numberOfRowsInSection が呼ばれず、cellForRowAtIndexPath だけ呼ばれてしまう可能性がある。セクション数などが変わった場合、Appが落ちる原因となる。
<OKの例>
- (void)viewWillAppear:(BOOL)animated { [self.tableView reloadData]; // OK [super viewWillAppear:animated]; }
上記2点の問題が解消されます。