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
}
}