呈现视图控制器的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方法中检查它是否已经被加载过,如果它已经加载,不要再次呈现视图控制器
或者,我更改为一次qr代码扫描,调用呈现的视图控制器委托中的函数(呈现控制器)导航到我想要的视图,因此跳过了再次执行viewDidLoad的问题。
检查正确可能是你有一些其他地方代码self.present。 –
'viewDidLoad'不应该再次被调用,也许你已经重复'viewWillAppear'中的代码? – jjatie
@jjatie我没有viewWillAppear定义?控制器是包含在一个选项卡内,可能这是为什么? – mwild