WEBアプリケーション研究室 開発ノート TOP

WEBアプリケーション研究室 開発ノート [iPhone開発]UINavigationControllerで更新後に親のTableをreloadする

スポンサーサイト

-------- --:--

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

    このエントリーをはてなブックマークに追加

UITableViewセルをクリックして、UINavigationControllerに新しい編集用のTableViewをpush、編集後保存ボタンをイベントにして、元のリストの一覧を読み直すというのをやってたのですが、とある本によると以下のようにやっていました。


[self.navigationController popViewControllerAnimated:YES];

NSArray *allControllers = self.navigationController.viewControllers;
UITableViewController *parent = [allControllers lastObject];
[parent.tableView reloadData];
これだとpopViewControllerAnimated:YESが実行された時点で、self.navigationControllerはnullになります。Objective-cではnullにメッセージを送ることは許されてるので、エラーにならず、reloadが行われないという状態になります。

正確には

NSArray *allControllers = self.navigationController.viewControllers;
NSInteger target = [allControllers count] - 2;
UITableViewController *parent = [allControllers objectAtIndex:target];
[parent.tableView reloadData];
[self.navigationController popViewControllerAnimated:YES];
自分の一個前の物を取得するので-2・・・気持ち悪いですね。現在のViewにポインタを持たせて呼び出した方がいいかも。ただポインタといえども微々たるメモリは消費すると思うので、iPhoneではこうした方がいいのかな・・・
スポンサーサイト

    このエントリーをはてなブックマークに追加
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。