Récupérer des variables dans les views
Bonjour,
J'ai une view controller et puis une deuxième view controller.
Dans le script de la premiere, j'ai des variables initialisées avant l'appel de la fonction :
viewDidLoad()
Dans le script de la deuxième view, j'accede a ces variables en initialisant une variable a (par exemple) comme cela :
var a = viewController()
Mais lorsque j'utilise une variable b :
var b = a.b
j'ai remarqué qu'elle m'affiche la valeur initiale (donc 0) et pas la valeur qu'elle a pris au fil du programme. Comment est ce que je pourrais remédier à ce problème. Merci d'avance et bonne soiree.
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
As-tu un exemple un peu plus concret ?
Dans le doute, j'aurais tendance à dire que tu inities une nouvelle variable plutôt que de prendre un élément déjà existant.
J'ai 2 views : ViewController et ResultViewController.
Dans la première j'ai initialisé plusieurs variables:
Apres j'ai plusieurs fonctions qui vont faire que la variable currentTeam va prendre la valeur de l'équipe choisie par l'utilisateur(grace au picker view entre autre).
Ensuite j'ai essayé de récupérer cette variable dans ma view ResultViewController :
Mais comme je vous l'ai dis, la variable a prend la valeur : "".
C'est comme si tu avais une classe Chien, et que tu crées une nouvelle instance de la classe (donc un nouveau chien) avec "var a = Chien()". Puis tu changes son nom, sa race, son age. Si plus tard tu écris autre part un "var a = Chien()" ça va créer un tout nouveau chien, complètement différent du premier. Du coup forcément il n'aura pas encore de nom, ni de race ni d'age, et certainement pas ceux que tu as affecté à ton premier chien.
Là tu as déjà un ViewController qui existe quelque part dans ton appli, si j'ai bien compris c'est celui-là que tu veux manipuler. Tu ne veux pas en créer un tout nouveau (pour le pousser sur l'écran par exemple) ou autre, tu veux manipuler celui qui existe déjà pour lui demander quelle est sa currentTeam. Donc il faut trouver un moyen de le récupérer pour pointer dessus (et ça, c'est à toi de voir comment faire, je veux dire ça dépend de comment ViewController et ResultViewController interagissent entre eux et sont liés dans ton parcours client etc)
D'accord je vois mais ce n'est pas ViewController que je veux manipuler, c'est ResultViewController. Je veux récupérer dans ce dernier les variables de ViewController.
Ce n'est pas ainsi qu'on procède: tu dois respecter la conception MVC (recherche...) et c'est le Modèle qui est partagé entre les deux contrôleurs. Après, il sera facile pour ResultViewController d'accéder aux données Modèle récupérées par ViewController.
Je ne m'étends pas sur le sujet, nous en avons parlé à maintes et maintes reprises.
Puisque tu dis "je veux récupérer les variables de ViewController" c'est bien ton instance de ViewController que tu veux récupérer pour lui demander sa currentTeam, non ?
La question que tu dois donc te poser, comme j'ai expliqué plus haut, c'est "de quelle instance de ViewControler je veux récupérer la currentTeam" ?
Car ce ViewController, il existe déjà quelque part, tu l'as dit toi-même, puisque c'est celui dans lequel tu as ton PickerView qui te permet de choisir ta currentTeam, et que "[tu as] plusieurs fonctions qui vont faire que la variable currentTeam va prendre la valeur de l'équipe choisie par l'utilisateur(grace au picker view entre autre)"
Donc, dans ton ResultViewController, c'est ce ViewController-là , l'instance qui existe déjà , à laquelle il faut accéder. Pas en créer un nouveau comme tu fais avec "var a = ViewController()" " qui, lui, crée une toute nouvelle instance toute fraà®che et toute vide qui n'a rien à voir avec celle que tu as précédemment affichée à l'écran.
Ceci dit, je ne peux qu'aller dans le sens de Céroce, c'est quand même une mauvaise approche et il est préférable de respecter le MVC, ou au besoin d'utiliser la délégation (pour que ton ViewController remonte à son delegate, qui sera alors le ResultViewController, quelle team a été sélectionnée), plutôt que de faire une architecture comme ce sur quoi tu es parti qui va te compliquer la vie. (cf Mon vieux auto sur les @protocol qui commence à sérieusement dater maintenant mais les concepts sont toujours corrects)