これが私がやろうとしていることです。Apple マップ アプリからのリクエストを処理するルーティング アプリを作成しています。マップ アプリは、次のメッセージをアプリ デリゲートに送信することでこれを行います。
- (BOOL) application: (UIApplication *) application
openURL:(NSURL *) url
sourcApplication:(NSString *)sourceApplication
annotation:(id)annotation
問題は、私のアプリが既に実行されていて、この時点でどのような状態になっているかということです。ナビゲーション スタックの奥深くに複数のレイヤーがある可能性があります。また、ナビゲーション スタックにルート コントローラーが 1 つしかない可能性もありますが、モーダル ビューが現在それを覆っています。
どこにいても、すべてのView Controllerをポップして、最上位のView Controllerを1つだけ保持したいのですが、これはその方法を知っています。しかし、モーダル ビューがある場合はそれを却下したいのですが、その方法がわかりません。
モーダル ビュー (または、可能性のあるモデル ビューが複数ある場合、そうではありませんが、質問のためにそれを求めています) がそれをカバーしているかどうかをどのように知ることができますか? そして、私はそれを却下したいですか?アプリデリゲートから直接アクセスできますか? 現在、ナビゲーション スタックの最上位のビュー コントローラーにモーダル ビュー コントローラーのポインター参照を保持し、参照が nil でない場合はビュー コントローラーを破棄しています。アプリ デリゲートは、最上位のビュー コントローラーにこのジョブを実行するように要求するだけです。
これは適切ですか?