【问题标题】:Presenting a new view controller and then dismissing it, calls init() on the parent view controller呈现一个新的视图控制器然后关闭它,调用父视图控制器上的 init()
【发布时间】:2019-09-04 15:02:46
【问题描述】:

我在我的应用程序上发现了一个非常奇怪的行为,视图控制器的结构如下:

TabBarViewController 包含:

- NavigationController(root is HomeViewController)
- NavigationController(root is SearchViewController)
- NavigationController(root is ProfileViewController)

当我在 HomeViewController 中时,我以模态方式呈现 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呢?

【问题讨论】:

  • 在HomeViewController 的init 中放置一个断点,看看是什么调用它。
  • @rmaddy OMG 你是最棒的,非常感谢你让我第 10 次在这个断点处寻找。我终于看到了这个问题,我正在 viewWillAppear 的 Tabbarviewcontroller 中创建视图控制器!该死的!非常感谢:)

标签: ios swift uitabbarcontroller modalviewcontroller


【解决方案1】:

感谢@rmaddy,我找到了问题。

为了找出答案,我在一直被调用的init() 函数中放置了一个断点。我发现在TabbarViewController 中调用它的人是viewWillAppear()。

问题是我在 viewWillAppear() 而不是 viewDidLoad() 上初始化了标签栏视图控制器,这使得每次出现一个视图时都重新创建所有标签控制器。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-07
    • 1970-01-01
    • 1970-01-01
    • 2017-02-03
    • 1970-01-01
    • 2017-07-09
    • 2017-09-19
    相关资源
    最近更新 更多