Как передавать данные между контроллером с помощью UIStoryboard в swift 3.0?Как передавать данные между контроллерами с помощью Storyboard в Swift 3.0?
Я создал логин (LoginViewController) и основной (ViewController) страницу, где приложения держать активным, если пользователь не выход из системы.
Пока это работает.
И у меня есть эти JSON значение «Войти», что необходимо передать из LoginViewController в ViewController
Некоторые люди предлагают использовать выполнения и подготовки SEGUE.
Работает, но значение может отображаться только в том случае, если оно отправлено из LoginViewController.
ViewController не сохранял данные, когда активна страница ViewController (когда я восстанавливаю/очищаю приложения).
Моя цель состоит в том, чтобы сохранить данные «входа» в ViewController, когда страница активна, и очистить данные «входа» при выходе страницы.
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()
}
}
Любая идея?
Спасибо.
Просто хранить свой ответ как модель класса или словарь, и что модель класса или словарь в userdefault, и проверить его на каждом didlaunchwithfinish, если у вашего приложения есть данные или нет в userdefault, если они загрузили его. –
Какие данные вы хотите сохранить? – User511
Я хочу сохранить данные «входа» в ViewController. – AlotJai