7

初期ウィンドウとして UITabbarController を持つアプリがあります(ログイン後、rootViewControllerとして設定します)

この tabbarController には 4 つの異なるタブがあり、これらはすべて UINavigationController に埋め込まれた UIViewController です。

私の tabbarController では、初期構成を行っているときに、次のようにタブを設定します。

  • まず、viewController を作成します。

    let tableViewController1 = tableViewController1(nibName: "tableViewController1", bundle: nil)
    let tableViewController2 = tableViewController2(nibName: "tableViewController2", bundle: nil)
    let tableViewController3 = tableViewController3(nibName: "tableViewController3", bundle: nil)
    let profileViewController = ProfileViewController(nibName: "ProfileViewController", bundle: nil)
    
  • 次に、それらを navigationControllers 内に埋め込みます。

    let navController1 = UINavigationController(rootViewController: tableViewController1)
    let navController2 = UINavigationController(rootViewController: tableViewController2)
    let navController3 = UINavigationController(rootViewController: tableViewController3)
    let navController4 = UINavigationController(rootViewController: profileViewController)
    
  • 最後に、navigationControllers を tabbarController の viewControllers として追加します。

    viewControllers = [navController1,navController2,navController3,navController4]

私はそれをオンラインで調べましたが、この使用方法は正しいようです。例: https://medium.com/@ITZDERR/uinavigationcontroller-and-uitabbarcontroller-programmatically-swift-3-d85a885a5fd0 . ただし、以下のようにライブ アプリからクラッシュ ログを受信して​​います

Crash, child view controller:<UINavigationController: 0x160b3400>
should have parent view controller:<ProfileViewController: 0x16098800>
but actual parent is:<MyApp.MainTabBarController: 0x16064c00>

ここでの問題は、クラッシュが profileViewController が navigationController の親である必要があることを示していますが、profileViewController を navigationController 内に埋め込み、tabbarController の viewControllers として追加したため、私の意見では順序が正しいことです。

このクラッシュを検索したところ、addChildViewController を使用するか、どこかで親を削除するステップをスキップしているようですが、わかりませんでした。

これへの関連リンクを見つけましたが、それらのどれもがこの問題を解決するのに役立ちませんでした。

リンクの例:

4

0 に答える 0