Comment passer des données entre un contrôleur utilisant UIStoryboard dans swift 3.0?Comment transmettre des données entre les contrôleurs à l'aide de Storyboard dans Swift 3.0?
J'ai créé connexion (LoginViewController) et page principale (ViewController) où des applications rester actif si l'utilisateur n'a pas déconnecté.
Jusqu'à présent, cela fonctionne.
et moi avons ces valeurs JSON "login" qui ont besoin d'être passé de LoginViewController dans ViewController
Certaines personnes suggèrent d'utiliser exécuter et préparer Segue.
Cela fonctionne mais la valeur ne peut être affichée que si elle a été envoyée par LoginViewController.
ViewController n'a pas conservé les données lorsque la page ViewController est active (lorsque je reconstruis/nettoie les applications).
Mon but est de conserver les données de "connexion" dans ViewController quand la page est active et effacer les données de "connexion" quand la page se déconnecte.
LoginViewController.swift
import UIKit
class LoginViewController: UIViewController {
@IBOutlet var _loginLbl: UITextField!
@IBOutlet var _pwLbl: UITextField!
@IBOutlet var login_button: UIButton!
@IBOutlet var outputLbl: UILabel!
var login: String!
var pw: String!
override func viewDidLoad() {super.viewDidLoad()}
@IBAction func loginData(_ sender: Any) {
login = _loginLbl.text
pw = _pwLbl.text
let url = URL(string: "http://localhost/login.php")
let session = URLSession.shared
let request = NSMutableURLRequest(url: url! as URL)
request.httpMethod = "POST"
let LoginDataToPost = "login=\(login!)&pw=\(pw!)"
request.httpBody = LoginDataToPost.data(using: String.Encoding.utf8)
let task = session.dataTask(with: request as URLRequest, completionHandler: {
(data, response, error) in
if error != nil {
return
}
else {
do {
if let json = try JSONSerialization.jsonObject(with: data!) as? [String: String]
{
DispatchQueue.main.async
{
let message = Int(json["message"]!)
let login = json["login"]
if(message == 1) {
UserDefaults.standard.set(true, forKey: "isUserLoggedIn")
UserDefaults.standard.synchronize();
self.dismiss(animated: true, completion: nil)
let myViewController:ViewController = self.storyboard!.instantiateViewController(withIdentifier: "ViewController") as! ViewController
let appDelegate = UIApplication.shared.delegate as! AppDelegate
appDelegate.window?.rootViewController = myViewController
appDelegate.window?.makeKeyAndVisible()
self.outputLbl.text = login;
return
}
else { }
}
}
else { }
} catch let jsonParse {}
}
})
task.resume()
}
}
}
ViewController.swift
import UIKit
class ViewController: UIViewController {
@IBOutlet var loginLbl: UILabel!
var login: String!
override func viewDidLoad() {
super.viewDidLoad()
let preferences = UserDefaults.standard
if(preferences.object(forKey: "isUserLoggedIn") != nil){
loginLbl.text = login
}
else {
}
}
override func viewDidAppear(_ animated: Bool) {
let isUserLoggedIn = UserDefaults.standard.bool(forKey: "isUserLoggedIn")
if(!isUserLoggedIn){
self.performSegue(withIdentifier: "loginview", sender: self)
}
}
@IBAction func logoutData(_ sender: Any) {
UserDefaults.standard.set(false, forKey: "isUserLoggedIn");
UserDefaults.standard.synchronize();
let loginViewController = self.storyboard!.instantiateViewController(withIdentifier: "loginview") as! LoginViewController
let appDelegate = UIApplication.shared.delegate as! AppDelegate
appDelegate.window?.rootViewController = loginViewController
appDelegate.window?.makeKeyAndVisible()
}
}
Toute idée?
Merci.
magasin juste votre réponse en tant que classe modèle ou le dictionnaire, et que la classe modèle ou un dictionnaire en userDefault, et vérifier à chaque n'a pas ajouté que si votre application contient des données ou non dans userdefault, si vous l'avez chargée. –
Quelles sont les données que vous souhaitez enregistrer? – User511
Je veux sauvegarder les données de "connexion" dans ViewController. – AlotJai