Ios 显示视图控制器';在显示的视图控制器解除后调用的s viewDidLoad

Ios 显示视图控制器';在显示的视图控制器解除后调用的s viewDidLoad,ios,swift,viewdidload,presentviewcontroller,Ios,Swift,Viewdidload,Presentviewcontroller,我有一个视图控制器,它显示另一个视图控制器,如下所示 override func viewDidLoad() { super.viewDidLoad() self.view.backgroundColor = .white let qrScannerViewController = QRScannerViewController() qrScannerViewController.presentedBy = self self.present(qrScanne

我有一个视图控制器,它显示另一个视图控制器,如下所示

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)
据我所知,它调用了presenting view controllers disclose函数

问题是,一旦取消显示视图控制器,将再次调用显示视图控制器的viewDidLoad,这意味着再次显示视图控制器

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

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

谢谢

显示视图控制器在UITAB控制器中定义:

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

好的,这里的问题是ARC在做它的工作

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

解决方案:

有几种解决方案可供选择:

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


或者,我改为扫描二维码后,调用presented view controller委托(presenting controller)中导航到我想要的视图的函数,因此,跳过再次执行viewDidLoad的问题。

正确检查可能是您有一些其他地方也为自己编写了代码。当前。
viewDidLoad
不应该再次调用,可能您在
ViewWillAspect
中重复了代码?@jjatie我没有定义ViewWillAspect?控制器包含在选项卡中,这可能是原因吗?
QRScannerViewController
是在故事板中设置的吗?@i这里的问题是如何防止每次出现初始VC时调用代码。