Ios 显示一个新的视图控制器,然后取消它,在父视图控制器上调用init()
我在我的应用程序上发现了一个非常奇怪的行为,视图控制器的结构如下所示:Ios 显示一个新的视图控制器,然后取消它,在父视图控制器上调用init(),ios,swift,uitabbarcontroller,modalviewcontroller,Ios,Swift,Uitabbarcontroller,Modalviewcontroller,我在我的应用程序上发现了一个非常奇怪的行为,视图控制器的结构如下所示: 选项卡视图控制器包含: - NavigationController(root is HomeViewController) - NavigationController(root is SearchViewController) - NavigationController(root is ProfileViewController) 当我在HomeViewController中时,我会显示modally Premium
选项卡视图控制器
包含:
- NavigationController(root is HomeViewController)
- NavigationController(root is SearchViewController)
- NavigationController(root is ProfileViewController)
当我在HomeViewController中时,我会显示modally PremiumViewController
@objc func premiumTapped() {
let premiumViewController = PremiumViewController(viewModel: PremiumViewModel(networkService: NetworkService(), purchasesService: PurchasesService.shared))
navigationController?.present(premiumViewController, animated: true, completion: nil)
}
在这里之前一切正常。
现在我退出PremiumViewController.
dismiss(animated: true, completion: nil)
发生的情况是HomeViewController
调用了它的init()
和viewDidLoad()
这怎么可能
HomeViewController一直存在,为什么它再次调用init?多亏了@rmaddy,我发现了这个问题
为了找到答案,我在一直被调用的init()
函数中放置了一个断点。我从TabbarViewController
中发现调用它的是viewwillappease()
问题是,我在viewwillappease()
上初始化了选项卡栏视图控制器,而不是在viewDidLoad()上初始化,这使得每次出现一个视图时都要重新创建所有选项卡控制器。在HomeViewController
的init
中放置一个断点,看看它叫什么。@rmaddy OMG您是最好的,非常感谢您让我在这个断点中查找第十次。我终于看到了这个问题,我正在ViewWillDisplay中的选项卡BarViewController中创建视图控制器!!该死的!非常感谢:)