Swift tentou apresentar modally um controlador activo [Controlador de vista actual] mesmo que o controlador apresentado seja outro

Li algumas respostas como ignorar o actual Controlador de visualização, mas a minha situação é diferente porque estou a apresentar outro controlador de visualização.

este código apresenta o controlador de visualização com o seu controlador de navegação, embora eu não possa aceder às suas propriedades:

@IBAction func didTouchAddFriend(_ sender: UIButton) {
DispatchQueue.main.async {

    let storyBoard = UIStoryboard(name: "CustomContact", bundle: nil)
        let customContactVC = storyBoard.instantiateViewController(withIdentifier: "CustomContact")

}
}
Enquanto este não funciona
@IBAction func didTouchAddFriend(_ sender: UIButton) {
    DispatchQueue.main.async {

        let navigation = UIStoryboard.init(name: "CustomContact", bundle: nil).instantiateInitialViewController() as! UINavigationController
        let pickerUserVC = navigation.viewControllers.first as! CustomContactsViewController
        self.present(pickerUserVC, animated: true, completion: nil)

    }
}
Tenho outro quadro de história chamado CustomContact.storyboard que contém um Controladomcontactsviewcontroller

Quando eu clicar no didTouchAddFriend, apenas me mostra este erro:

'NSInvalidArgumentException', reason: 'Application tried to present modally an active controller <Main.MainViewController: 0x7ff29f06ac00>.'

não consigo compreender o erro porque quando imprimi o valor do pickerUserVC, ele mostra o controlador da vista certa:

<Main.CustomContactsViewController: 0x7fd1b7922400>

MainViewController é o controlador de visualização actual que executa a função didTouchAddFriend

 0
Author: Rendell Lasola, 2018-01-19

1 answers

Você deve apresentar o Controlador de navegação (que hospeda o CustomContactsViewController Como é o controlador de vista de raiz).

Além disso, você pode ignorar a chamada de despacho, já que estamos em uma @ IBAction que já corre no fio principal:

@IBAction func didTouchAddFriend(_ sender: UIButton) {
    let navigation = UIStoryboard.init(name: "CustomContact", bundle: nil).instantiateInitialViewController() as! UINavigationController
    let pickerUserVC = navigation.viewControllers.first as! CustomContactsViewController
    self.present(navigation, animated: true, completion: nil)
}
 3
Author: Andreas Oetjen, 2018-01-19 08:31:05