Дочерний контроллер представления должен иметь родительский контроллер представления, но фактический родительский (UIViewControllerHierarchyInconsistency) - PullRequest
3 голосов
/ 16 марта 2020

У меня есть приложение, которое имеет UITabbarController в качестве начального окна (после входа в систему я установил его как rootViewController)

Этот tabbarController имеет 4 различных вкладки, которые являются всеми UIViewControllers, встроенными в UINavigationController.

В моем tabbarController, когда я делаю начальные конфигурации, я устанавливаю вкладки, как показано ниже:

  • Сначала я создаю viewControllers:

    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)
    
  • Затем я встраиваю их в навигационные контроллеры:

    let navController1 = UINavigationController(rootViewController: tableViewController1)
    let navController2 = UINavigationController(rootViewController: tableViewController2)
    let navController3 = UINavigationController(rootViewController: tableViewController3)
    let navController4 = UINavigationController(rootViewController: profileViewController)
    
  • Наконец, добавьте навигационные контроллеры как viewControllers tabbarController

    viewControllers = [navController1, navController2, navController3, navController4]

Я посмотрел его в Интернете, и этот способ использования кажется правильным. Пример: https://medium.com/@ITZDERR / uinavigation Controller-and-uitabbarcontroller-programmatic-swift-3-d85a885a5fd0 . Однако я получаю логи cra sh из моего живого приложения, как показано ниже

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

Проблема здесь в том, что cra sh говорит, что profileViewController должен быть родителем навигационного контроллера, однако я встроил profileViewController внутри navigationController и добавлен как tabbarController viewControllers, так что, на мой взгляд, порядок правильный.

Я искал этот cra sh, и мне кажется, что я пропускаю шаг либо с помощью addChildViewController, либо где-то удаляю родителя , но не смог выяснить.

Я нашел связанную ссылку на это, но ни одна из них не помогла мне решить эту проблему.

Пример ссылки:

...