prepareForSegue appelé avant viewDidLoad ?

Bonsoir tout le monde,

Je reçois une valeur depuis un autre contrôleur que je stocke avec un didSet dans une variable de mon ViewController, ensuite, j’aimerai l’utiliser pour la passer dans un prepareForSegue (passage de donnée via un ContainerView), seulement, on dirait que le prepareForSegue est exécuté avant le viewDidLoad…

Que faire ?

Exemple de mon code:

var _event:Event?

override func viewDidLoad() {
    super.viewDidLoad()

    if let groupsTabBarController = self.tabBarController as? GroupsTabBarController {
        _event = groupsTabBarController._event
    }
}

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if(segue.identifier == "nav_person_tableView_segue") {
        if let destinationTableViewController:PersonsTableViewController = segue.destination as? PersonsTableViewController {

            // _event est Nil ici puisque c'est chargé avant le viewDidLoad
            destinationTableViewController._event = _event

            /*
            Si je fais ça ici (ce qu'il y a dans mon viewDidLoad):
                if let groupsTabBarController = self.tabBarController as? GroupsTabBarController {
                    _event = groupsTabBarController._event
                 }
            Alors, ça fonctionne...
            */
        }
    }
}

Les idées sont les bienvenues :slight_smile:

Bonne soirée,

Alexandre

Le + simple : Tu définis une property dans ton controleur destination,

ex (pseudo code de tête :wink: :

class Panier: UIViewController{
    var montant = String()
}

Dans le viewDidLoad, tu regardes si ta variable est ok en fonction de tes besoins

  override func viewDidLoad() {
         super.viewDidLoad()
         
         if (montant == "") {
            montantPanier.text = "Votre panier est vide !"
         } else {
             montantPanier.text = montant
         }         
     }

et dans le prepareForSegue de ton controleur (source) bien sur tu renseignes la proprty …

 override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
     
        let vueDestination = (segue.destination as! Panier)

        vueDestination.montant = self.nouveauPrixLabel.text!
    }

Je procède ainsi en objective-c et ça roule :slight_smile:

Bonsoir @jcbremond,

Oui, c’est ce que je fais déjà en fait, je me demandais juste s’il n’y avait pas un autre moyen :slight_smile:
Dans ce que je fais pour le moment, en fait, c’est un peu plus lourd, parce que je passe une variable via un prepare puis encore via un autre prepare (vive les ContainerView…).

Mais au final, je déballe juste un optionnel avant de faire comme tu as mis que tu faisais.

Je vais garder comme ça alors :slight_smile:

Merci de ta réponse,