2016-11-23 2 views
2

У меня есть контроллер представления, который представляет другой контроллер представления, как такпредставления с контроллером уволенного

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 
+0

Проверьте, может быть, у вас есть где-то еще код для self.present. –

+0

'viewDidLoad' не должен быть вызван снова, возможно, вы повторили код в' viewWillAppear'? – jjatie

+0

@jjatie У меня нет viewWillAppear определено? Контроллер находится внутри вкладки, может быть, поэтому? – mwild

ответ

0

Ok поэтому проблема здесь была ARC выполняя свою работу.

Когда контроллер представления представления представил другой контроллер вида, ARC выгружает контроллер представления. Это означало, что, когда представленный контроллер зрения был уволен, представляющий один был пересоздан, следовательно, заставляя метод viewDidLoad получить колл снова

Решение:

Несколько решения:

Прежде всего, я просто сохранил флаг в помощнике, который я мог проверить в методе viewDidLoad, чтобы убедиться, что он уже был загружен раньше, и если бы он был, не представляйте контроллер вида снова

В качестве альтернативы я изменил код, отсканировать, вызвать функцию в представленном представлении контроллеров (контроллер представления), который перешел к тому представлению, которое я хотел, поэтому пропуская проблему с просмотром viewDidLoad снова.

Смежные вопросы