私はナビゲーションベースのアプリケーションをビルドしています。そこでは下部タブでナビゲートし、各タブには独自のナビゲーションスタックがあります。 部品のほとんどは期待通りに機能しますが、特定のタブが予期せず動作します。何が起こっているperformSegueは次のビューコントローラを不要なビュー階層にプッシュします
は次のとおりです。
いくつかのビューコントローラをナビゲートした後、のは言う[A] [B] [C]と[D]、次のコントローラ[E]が突然ナビゲーションスタック消灯しましょう。 ビューがモーダルに表示されているように見え、ナビゲーションスタックは次のようになります。
(lldb) po [[[UIWindow keyWindow] rootViewController] _printHierarchy]
<MyApp.CRTabBarController 0x112026800>, state: disappeared, view: <UILayoutContainerView 0x111e1fa00> not in the window
| <UINavigationController 0x112027a00>, state: disappeared, view: <UILayoutContainerView 0x111e23f50> not in the window
| | <MyApp.X1_ViewController 0x111d12490>, state: disappeared, view: <UIView 0x111e32d70> not in the window
| | | <MyApp.InsideX1_ViewController 0x112096200>, state: disappeared, view: <UIView 0x111e35d90> not in the window
| <UINavigationController 0x11200aa00>, state: disappeared, view: (view not loaded)
| | <MyApp.X2_ViewController 0x111d22360>, state: disappeared, view: (view not loaded)
| <UINavigationController 0x11205a200>, state: disappeared, view: (view not loaded)
| | <MyApp.X3_Controller 0x11205a800>, state: disappeared, view: (view not loaded)
| <UINavigationController 0x112059600>, state: disappeared, view: (view not loaded)
| | <MyApp.X4_ViewController 0x111e0cea0>, state: disappeared, view: (view not loaded)
| <UINavigationController 0x112058e00>, state: disappeared, view: <UILayoutContainerView 0x111d50370> not in the window
| | <MyApp.A_ViewController 0x111d25f70>, state: disappeared, view: <UIView 0x116e0ad90> not in the window
| | | <MyApp.PageViewController 0x112891400>, state: disappeared, view: <_UIPageViewControllerContentView 0x113feb0a0> not in the window
| | | | <MyApp.InnerPageViewController 0x111ee3bf0>, state: disappeared, view: <UIView 0x111e6e000> not in the window
| | <MyApp.B_ViewController 0x113ee8280>, state: disappeared, view: <UIView 0x116e37cf0> not in the window
| | <MyApp.C_Controller 0x118f06f10>, state: disappeared, view: <UIView 0x113ee46f0> not in the window
| | <MyApp.D_ViewController 0x116e5f580>, state: disappeared, view: <UIView 0x118f2fe70> not in the window
+ <E_ViewController 0x116ecff30>, state: appeared, view: <UIView 0x111ee43f0>, presented with: <_UIFullscreenPresentationController 0x116e13420>
上から4つのナビゲーションコントローラは、ここでは関心のない非アクティブなタブです。最後のタブのナビゲーションには、A_ to D_ - ViewController's
が表示されます。次に、E_ViewController
が異なるナビゲーション階層にあり、これがここでの問題です。
コードはかなりまっすぐです。D_ViewController
はこのようにperformSegue
を呼び出すだけです。
self.performSegue(withIdentifier: "goto_E", sender: self)
Segue
の設定もかなり普通だと思います。これはidと "Show"をスタイルとして指定するだけです。 Segue
はD_ViewController
からE_ViewController
に接続されているので、performSegue's
識別子argと呼ばれることがあります。
は、誰もが経験のこの種を持っていましたか?考えられる理由を推測しますか?
DからEへのセグは、チェーン内の他のものと同じですか?BからCまたはCからD? –
はい、すべて同じです。私は視覚的にセグをクリックして比較し、識別子以外は何も変わらなかった。 –
そして、B_ViewControllerはC_ViewControllerに、C_ViewControllerはD_ViewControllerに同じように移動しますか? –