スウィフト3.0でUIStoryboardを使用してコントローラ間でデータをやりとりする方法は?Swift 3.0のStoryboardを使用してコントローラ間でデータを渡す方法は?
は、私は、ユーザーがログアウトしなかった場合、アプリケーションがアクティブに保つログイン(LoginViewController)とメイン(ViewControllerを)ページを作成しました。
これまでのところ動作します。
そして私は人々のいくつかは実行し、準備セグエを使用することをお勧め
の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()
}
}
任意のアイデア?
ありがとうございました。
:
あなたは以下のようにあるコントローラから別のコントローラにデータを渡すことができますdidlaunchwithfinishあなたのアプリがデータを持っているかどうか、もしそれがロードされていれば、userdefaultにあります。 –
保存したいデータはありますか? – User511
"ログイン"データをViewControllerに保存したい。 – AlotJai