显示视图控制器的 viewDidLoad 在显示的视图控制器关闭后被调用

Presenting view controller's viewDidLoad getting called after presented view controller dismissed

我有一个视图控制器,它呈现另一个像这样的视图控制器

override func viewDidLoad() {
    super.viewDidLoad()
    self.view.backgroundColor = .white

   let qrScannerViewController = QRScannerViewController()
   qrScannerViewController.presentedBy = self
   self.present(qrScannerViewController, animated:true, completion: nil)

    // Do any additional setup after loading the view.
}

qrScannerViewController(呈现的视图控制器)然后调用

self.dismiss(animated:true, completion: nil)

根据我的理解,无论如何调用呈现视图控制器关闭函数。

问题是,一旦呈现的视图控制器被关闭,呈现的视图控制器的 viewDidLoad 会再次被调用,这意味着视图控制器会再次呈现。

有什么办法解决这个问题吗?

即使我使用委托,呈现视图控制器的 viewDidLoad 也会被再次调用

谢谢

呈现视图控制器在 UITabController 中定义:

let qrPlaceholderViewController = QRPlaceholderViewController()
let controllers = [restaurantNavController,favouritesViewController, qrPlaceholderViewController, profileViewController]
self.viewControllers = controllers

好的,所以这里的问题是 ARC 正在做它的工作。

当呈现视图控制器呈现另一个视图控制器时,ARC 正在卸载呈现控制器。这意味着当呈现的视图控制器被关闭时,呈现的视图控制器被重新实例化,因此强制再次调用 viewDidLoad 方法

解决方案:

有几个可用的解决方案:

首先,我只是在一个帮助器中存储了一个标志,我可以在 viewDidLoad 方法中检查它是否已经加载过,如果已经加载过,就不要再显示视图控制器了

或者,我更改为扫描二维码后,在呈现的视图控制器委托(呈现控制器)中调用一个函数,该函数导航到我想要的视图,因此跳过了正在执行的 viewDidLoad 的问题再次.