アプリケーションのナビゲーションをUITabBarControllerの使用からuUINavigationControllerに変更しました。つまり、以前のソリューション(最初のバージョン)は、TabBarController-4つのViewController(1つの単純なTableView、1つの単純なカスタムビュー、および多くのオーバーレイを備えた1つのMapView)のみに基づいていました。2番目のバージョンは、UINavigationControllerのみに基づいています。
TabBarControllerの場合、それは明確で単純であり、すべてが正常に機能しました。特にMapViewは正常に機能しました。つまり、MapViewは一度(かなりの数のオーバーレイで)ロードされ、別のビューに移動してMapViewに戻ると、MapViewはまだそこにあり、オーバーレイは既にロードされて表示されています(簡単なチェック:MapViewのviewDidLoadが呼び出されました)アプリの実行ごとに1回だけ、そこにいくつかのデバッグメッセージがありました)。
ここで、ナビゲーションロジックをUINavigationControllerに変更しました。最初の外観ではすべて正常に機能しますが、ビューに移動するたびに(各ビューの)viewDidLoadが呼び出されます。特にMapViewの場合は煩わしいです。オーバーレイの読み込みは毎回実行され、時間がかかり、場合によってはアプリがクラッシュします。
OK、私の質問:
これは、NavigationControllerのある種の「一般的な」動作ですか?
この動作を変更して、viewDidLoadが1回だけ呼び出されるようにすることはできますか?
その他-ビューの「表示シーケンス」にどのように影響を与えることができますか?
ロジックはおそらくもっと複雑だと思いますが、答えやヒントはありがたいです;)
いくつかの関連する状況:
- TabBarとNavigationコントローラーは組み合わされていません。
- 私はストーリーボードを使用しています。セグエはUIBで設計されており、コードでperfomSegueやprepareForSegueのような手動呼び出しはありません。1つのボタンでMapViewへのセグエがトリガーされます。
- プッシュセグエを使用しています。
- また、モーダルセグエを使用しようとしましたが、その動作は変更されていません。
- ビュー間のセグエ中にviewDidUnloadが呼び出されることはありません。
- メモリ警告を受信しませんでした。
- シミュレータとiPhone4の両方で測定されたメモリリークはありません。
- ナビゲーションだけを気にする非常にシンプルな一時的なプロジェクト/アプリを作成しようとしました。コーディングなしのコントローラーおよびその他のビュー、ストーリーボードのみ。それは同じ振る舞いでした。
- 1つのビューとMapViewの間でナビゲーションボタンと戻るボタンを高速かつ定期的にタップすると、アプリがクラッシュする問題がありました。ほとんどの場合、完全に表示される前に(つまり、オーバーレイ)MapViewの戻るボタンをタップすると、アプリがクラッシュしました。1秒追加すると修正されました。MapViewのviewDidDisappearedでのdelayメソッド呼び出し。それは公正な修正ではありません、私は知っています;)