Je travaille sur un formulaire d'inscription, je dois obtenir des données à partir d'un autre contrôleur d'affichage lorsque je revenir dans la première vue de la même visualisation, mes données stockées dans des champs de texte étaient vides. Je n'ai pas travaillé avec Sugues.J'ai mentionné une partie importante du code où une erreur peut être.
import UIKit class EmergencyContactVC: UIViewController{ @IBAction func backTapped(_ sender: Any) { let vc = UIStoryboard.init(name: "Main", bundle: Bundle.main).instantiateViewController(withIdentifier: "RegisterVC") as? RegisterVC vc?.phoneText = self.numberArray self.navigationController?.pushViewController(vc!, animated: true) }
3 Réponses :
Lorsque vous Avez-vous essayé ceci: p> instantiateviewController code> Il créera un nouvel objet pour
registervc code>.
var retrievedString = defaults.objectForKey("yourKey") as? String
Il y a plus de 10 champs de texte. L'utilisation de Nsuserdefaults ne serait pas complexe et difficile? ou là une autre solution?
Oui correct!! Essayez de ne pas utiliser de ne plus instancier ..
La réponse de @harish pourrait être une bonne solution mais, à cause de UserDefaults stockera ces données pour toujours (même si vous fermerez l'application et l'ouvrira à nouveau), une autre bonne solution pourrait être une variable globale, donc ces données. serait stocké et utilisé même si vous modifiez la vue Contentreuse, puis revenez, mais ils ne seront pas stockés si vous fermerez l'application.
Déclarez une variable en dehors de la portée (en dehors de la classe), comme suit: Il s'agit d'un exemple, vous pouvez donc l'utiliser dans une autre vue de vue, puis l'utiliser à nouveau lorsque vous revenez. P > p>
Tout d'abord, dans votre exemple, vous avez Peu importe, il existe deux modèles appropriés pour réussir les données de VC2 à VC1 lorsque VC1 pousse VC2: délégué et segues . P> en VC2, ajoutez le protocole et les propriétés: p> en VC1, déclarez la propriété que vous souhaitez recevoir et, où vous souhaitez appuyer sur VC2. , Attribuez VC1 comme délégué: p> registervc code> appuyant
d'urgenceContactvc code> et
d'urgenceContactvc code> appuyant
registervc code>. Vous vous référez également à
ContactScontroller Code>, mais il n'est pas clair comment ces trois sont censés interagir / écoulement. Il semble que
blacktheappe code> devrait
PopViewController code>, pas instancier à nouveau.
func unwindToVC1( _ segue: UIStoryboardSegue ) {
if let vc2 = segue.source as? VC2 {
self.name = vc2.nameEnteredByUserInVC2
}
}
Vous devez juste ajouter autoavigationController? .popviewController (animé: true). Vous ne faites pas que vous faites un contrôleur de poussée afin que chaque contrôleur de temps soit créé de nouveau.
Je dois ajouter autoavigationController? .popviewController (animé: true) Cette méthode dans le contrôleur de deuxième vue?
Oui, vous devez ajouter un contrôleur de deuxième vue.