스위프트 3.0에서 UIStoryboard를 사용하는 컨트롤러간에 데이터를 전달하는 방법은 무엇입니까?Swift 3.0에서 Storyboard를 사용하여 컨트롤러간에 데이터를 전달하는 방법은 무엇입니까?
나는 사용자가 로그 아웃하지 않은 경우 응용 프로그램이 활성 상태로 유지 로그인 (LoginViewController) 및 주요 (의 ViewController) 페이지를 만들었습니다.
지금까지 작동합니다.
는 그리고 나는 사람들 중 일부는 수행 사용 SEGUE을 준비하는 것이 좋습니다 의 ViewController
에 "로그인"이 필요이 LoginViewController에서 전달되는 이러한 JSON 값을 가지고있다.
작동하지만 값은 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는 앱에 데이터가 있거나 사용자 정의하지 않은 경우로드합니다. –
저장하려는 데이터는 무엇입니까? – User511
"로그인"데이터를 ViewController에 저장하려고합니다. – AlotJai