私が持っているこの問題を修正する方法、またはより良い実装設計についてのアドバイスはありますか?
要件
- 前回のセッションでアプリケーションを終了する前に、アプリケーションの起動時にユーザーを前の詳細ページに移動させる方法が必要でした。
- アプリのメイン画面にあった場合は、再起動時にここにとどまることができます
- 私はUINavigationControllerで作業しており、メイン画面と詳細画面はUITableViewController上に構築されていると仮定しています
私の実装コンセプト
- 「viewdidLoad」にチェックを入れて詳細画面かどうかを確認し、そうであればこちらへジャンプ(下記コード参照)
問題
- 通常は正常に動作しますが、メモリ警告をトリガーすると、問題が発生し、ナビゲーションバーの奇妙な動作が発生します。たとえば、詳細ページのコンテンツ (UITableView) にいるように見えるときに、メイン ページのナビゲーション ボタンが表示されます。
私の分析
詳細ページ (appointmentsListController) にいて、シミュレーターでメモリ警告が表示されたときに表示される内容から、次のように表示されます。
(a)メインページ「viewDidLoad」が実際に呼び出されますが、これは私のコンセプトでは予期していなかったため、詳細ビュー(UINavigationController)から戻るボタンを押してメインビュー(RootViewController)に移動しましたが、実際には私のコードが実行され、ユーザーを詳細ページに戻そうとします
(b) この時点の後、[AppointmentListController viewDidLoad] が以前の AppointmentListController dealloc メソッドが呼び出される前に呼び出されたように見えることをログに記録しました (つまり、コントローラー A にいたように、コントローラー B に戻りましたが、A にスローされました -そして、最初の部分の最初の解放は遅くまで開始されませんでした...)
- ですから、私のアイデアがあまり素晴らしいものではないことは明らかだと思います
質問
私の要件をより適切に実装する方法について何か提案はありますか? (確認方法、どの方法で入れるか)
コード
- (void)viewDidLoad {
[super viewDidLoad];
// My Implementation of the Requirements which seems flawed in the case there is memory warning triggered
if ( previousSelectedScreen >= 0 ) {
// Setup New Controller
AppointmentListController *appointmentListController = [[AppointmentListController alloc] initWithNibName:@"AppointmentListController" bundle:nil];
appointmentListController.screenToShow = previousSelectedScreen;
// Push new view onto stack
[[self navigationController] pushViewController:appointmentListController animated:NO];
[appointmentListController release];
}
}