リモート Web サービスへのタイムアウトを処理するために UIViewControllers に実装したデリゲート/ハンドラーがあります。Web サービスに対してリクエストが行われ、タイムアウトの http コードが返されると、デリゲートが呼び出され、次の処理が実行されます。
UINavigationController *navController = self.navigationController;
if (navController) {
[navController popToRootViewControllerAnimated:YES];
} else {
NSLog(@"navController is null/nil");
}
次の手順を実行するnavController
と、正しくインスタンス化され、popToRootViewController
アクションが発生します。
- Login ViewController の Web サービスでアプリを認証する
- CustomMenuViewController へのセグエを自動トリガーする
- Web サービスがリモートでタイムアウトするのを待ちます
- クリックして、CustomSubMenuViewController へのセグエをトリガーします
ここで、次の手順を実行すると、何らかの理由で navController が正しく設定されていないため、上記のコード ブロックの else 句がトリガーされます。
- CustomLoginViewController の Web サービスでアプリを認証する
- CustomMenuViewController への自動セグエ
- すぐにクリックして、CustomSubMenuViewController へのセグエをトリガーします
- 戻るボタンをクリックしてポップをトリガーする
- Web サービスがリモートでタイムアウトするのを待ちます
- クリックして、同じ CustomSubMenuViewController へのセグエをトリガーします
私の質問は、ViewController を 2 回目にロードしたときに、self.navigationController が null を返すのはなぜですか?
上記の例のコール スタックは次のようになります。
NavigationController -> CustomLoginViewController -> CustomMenuViewController -> CustomSubMenuViewController
ありがとう
更新: この問題についてはまだ進展がありません!