[Résolu]Comment stocker les valeurs d'un résultat d'une requête AJAX

Bonjour,

mon problème est le suivant :
J’ai un ViewController qui sert à s’authentifier via une requête AJAX pour ouvrir mon application, ça marche mais je souhaiterai réutiliser les valeurs du retour JSON dans d’autres ViewController.

Ca fait 24h que je gratte sans succès… je crois que je me suis perdu et embrouillé le cerveau.
Si quelqu’un peu m’allumer la lumière svp.

Code du LoginViewController :

class LoginViewController: UIViewController {

    @IBOutlet weak var ui_prefix: UITextField!
    @IBOutlet weak var ui_codeUser: UITextField!
    @IBOutlet weak var ui_pwd: UITextField!
    
    @IBAction func validParam() {
            //---------- Récupération des identifiants utilisateur et envoi vers le proxy_securite.php -----------
            let _proxy = ProxySecurite()
            _proxy.parameters["Mode"] = "SECURITE"
            _proxy.parameters["Prefix"] = ui_prefix.text
            _proxy.parameters["CodeUser"] = ui_codeUser.text
            _proxy.parameters["Pwd"] = ui_pwd.text
            _proxy.ajax()
    }
    
    override func viewDidLoad() {
        super.viewDidLoad()
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }
    
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

    }
}

J’utilise Alamofire et CodableAlamofire dans ma class d’authentification pour interpréter le JSON dans une class :

class ProxySecurite {

    var parameters: Parameters = [
        "Mode" : " ",
        "Prefix" : " ",
        "CodeUser" : " ",
        "Pwd" : " "
    ]
 
//-------------------------- fonction d'envoi des paramètres utilisateur et retour des valeurs du JSON -------------------
    
    func ajax() {
        
        let decoder = JSONDecoder()
        decoder.dateDecodingStrategy = .secondsSince1970
        
        Alamofire.request("https://******.com/webservices/IOS_proxy_securite.php?", method: .post, parameters: parameters).responseDecodableObject(decoder: decoder)
         { (response: DataResponse<JsonStruct>) in
            
            if let json = response.result.value {
                print("JSON: \(json)")
                print(json.success)

                // ---------- si "success" = true alors on ouvre l'appli sinon on affiche un popup------------
                if json.success == true {                   
                    
                    // ------------ attribution des valeurs à la class UserParameters------------
                    let setUserParameters = UserParameters()
                    setUserParameters.P_Ape = json.Ape
                    setUserParameters.P_CodeUser = json.CodeUser
                    setUserParameters.P_DateLimite = json.DateLimite
                    setUserParameters.P_Enseigne = json.Enseigne
                    setUserParameters.P_Factures = json.Factures
                    setUserParameters.P_ImpTicket = json.ImpTicket
                    setUserParameters.P_Information = json.Information
                    setUserParameters.P_NiveauUtilisateur = json.NiveauUtilisateur
                    setUserParameters.P_Prefix = json.Prefix
                    setUserParameters.P_ProductName = json.ProductName
                    setUserParameters.P_Pwd = json.Pwd
                    setUserParameters.P_Reservations = json.Reservations
                    setUserParameters.P_Restaurant = json.Restaurant
                    setUserParameters.P_Siret = json.Siret
                    setUserParameters.P_Societe = json.Societe
                    setUserParameters.P_SoftVersion = json.SoftVersion
                    setUserParameters.P_Tva = json.Tva
                    setUserParameters.P_UrlRedirect = json.UrlRedirect
                    setUserParameters.P_Utilisateur = json.Utilisateur
                    // ----------------- transition vers un view controleur en fonction de son ID storyboard ---------------
                    let getStoryboard = UIStoryboard(name: "Main", bundle: nil)
                    let getView = getStoryboard.instantiateViewController(withIdentifier: "main-split-view") as! UISplitViewController
                    let appDelegate = UIApplication.shared.delegate as! AppDelegate
                    appDelegate.window?.rootViewController = getView
                } else {
                    print("success = false")
                    //---------- Affichage d'un popup alerte -----------
                    let errorInfo = UIAlertController(title: "Oups !!!", message:
                        "Informations incorrects", preferredStyle: UIAlertControllerStyle.alert)
                    errorInfo.addAction(UIAlertAction(title: "Réessayer", style: UIAlertActionStyle.default,handler: nil))
                    var topController:UIViewController = UIApplication.shared.keyWindow!.rootViewController!
                    while ((topController.presentedViewController) != nil) {
                        topController = topController.presentedViewController!;
                    }
                    topController.present(errorInfo, animated: true, completion: nil)
                }
            }
        }
    }
} 

Voici la structure que j’utilise pour décoder le JSON avec DecodableAlamofire :

struct JsonStruct: Decodable {
    
    let Ape: String?
    let CodeU: String?
    let CodeUser: String?
    let DateLimite: String?
    let Enseigne: String?
    let Factures: String?
    let ImpTicket: String?
    let Information: String?
    let NiveauUtilisateur: String?
    let Prefix: String?
    let ProductName: String?
    let Pwd: String?
    let Reservations: String?
    let Restaurant: String?
    let Siret: String?
    let Societe: String?
    let SoftVersion: String?
    let Tva: String?
    let UrlRedirect: String?
    let Utilisateur: String?
    let success: Bool

    enum CodingKeys: String, CodingKey {
        
        case Ape
        case CodeU
        case CodeUser
        case DateLimite
        case Enseigne
        case Factures
        case ImpTicket
        case Information
        case NiveauUtilisateur
        case Prefix
        case ProductName
        case Pwd
        case Reservations
        case Restaurant
        case Siret
        case Societe
        case SoftVersion
        case Tva
        case UrlRedirect
        case Utilisateur
        case success
        
    }
}

Je ne suis pas certain de comprendre. Tu te pose la question de transformer ton JSON en objets ou tu as déjà les objets et tu ne sais pas comment les faire passer entre les ViewControllers ?

J’ai vite fait regardé ton dernier cours sorti ce week-end. Je suis sur que la réponse à mon problème est dans ton cours. Happy learning !
Je vais chercher et comprendre la réponse par moi même. Ce sera mieux pour moi.

Effectivement l’apprentissage du SINGLETON et une révision des variable static, public et private ont solutionné mon problème ! Encore merci pour l’efficacité des cours !

1 « J'aime »

Cool, content d’avoir pu t’aider :slight_smile: