显示视图控制器的 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 的问题再次.
我有一个视图控制器,它呈现另一个像这样的视图控制器
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 的问题再次.