【swift】UserDefaultsの使い方について当方swiftビギ

Writer: admin Type: ゃべり、雑談 Date: 2018-12-14 00:00
【swift】UserDefaultsの使い方について当方swiftビギナーです。下記にコードを記載させて頂きます。-------------------------------------------------------import UIKitclass ViewController: UIViewController, UITextFieldDelegate { @IBOutlet weak var textField1: UITextField! @IBOutlet weak var textField2: UITextField! @IBOutlet weak var errorMessage: UILabel! let appDelegate: AppDelegate = (UIApplication.shared.delegate as?AppDelegate)! // UserDefaults のインスタンス let userDefaults = UserDefaults.standard let userDefaults2 = UserDefaults.standard var one: String = "オッケーです" @IBAction func getTextField(_ sender: Any) { if let text = textField1.text, !text.isEmpty{ if let text = textField2.text, !text.isEmpty{ if appDelegate.idTextField == textField1.text { if appDelegate.passTextField == textField2.text{ //ボタンを押した時にテキストフィールド内のテキストをアップデリゲートに代入 appDelegate.idInputTextField = textField1.text appDelegate.passInputTextField = textField2.text userDefaults.removeObject(forKey: "DataStore") userDefaults2.removeObject(forKey: "DataStore") // Keyを指定して読み込み let str: String = userDefaults.object(forKey: "DataStore")as! String let str2: String = userDefaults2.object(forKey:"DataStore") as! String textField1.text = str textField2.text = str2 textField1.text! = appDelegate.idInputTextField saveData(str: textField1.text!) textField2.text! = appDelegate.passInputTextField saveData(str: textField2.text!) appDelegate.getTextlabel = one performSegue(withIdentifier: "oneToTwo", sender: nil) }else{ errorMessage.text = "パスワードに誤りがあります" } }else{ errorMessage.text = "IDに誤りがあります" } }else{ errorMessage.text = "パスワードを入力して下さい" } }else{ errorMessage.text = "IDを入力して下さい" } } override func viewDidLoad() { super.viewDidLoad() // textFiel の情報を受け取るための delegate を設定 textField1.delegate = self // デフォルト値 userDefaults.register(defaults: ["DataStore": appDelegate.idInputTextField]) textField1.text = readData() // textFiel の情報を受け取るための delegate を設定 textField2.delegate = self // デフォルト値 userDefaults2.register(defaults: ["DataStore":appDelegate.passInputTextField]) textField2.text = readData() // Do any additional setup after loading the view, typically from a nib. } func textFieldShouldReturn(_ textField: UITextField) -> Bool{ textField1.text! = appDelegate.idInputTextField saveData(str: textField1.text!) textField2.text! = appDelegate.passInputTextField saveData(str: textField2.text!) return true } func saveData(str: String){ // Keyを指定して保存 userDefaults.set(str, forKey: "DataStore") userDefaults.synchronize() userDefaults2.set(str, forKey: "DataStore") userDefaults2.synchronize() } func readData() -> String { // Keyを指定して読み込み let str: String = userDefaults.object(forKey: "DataStore") as! String let str2: String = userDefaults2.object(forKey: "DataStore") as! String return str; str2 } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. }}-------------------------------------------------------textFieldに値を入力し、ログインしたあとにUserDefaultsで保存?された値を再びtextField1とtextField2にそれぞれ値を表示させようとしていますが、うまくいきません。appDelegate.passInputTextFieldの値は1111です。どうか最善策を教えてください。宜しくお願いします。###UserDefaultsでしたら以下のコードで出来ませんか?蛇足になりますが、パスワードといった重要なものはKeyChainを使った方が安全だと思いますが、私は詳しくないので後で調べてみたらいかかでしょうか?import UIKitlet idKey = "ID"let passwordKey = "Password"class ViewController: UIViewController{ @IBOutlet weak var idText: UITextField! @IBOutlet weak var passwordText: UITextField! let userDefaults = UserDefaults.standard override func viewDidLoad() { super.viewDidLoad() let defaultDic = [idKey: "初期値", passwordKey: "初期値"] userDefaults.register(defaults: defaultDic) idText.text = userDefaults.object(forKey: idKey) as? String passwordText.text = userDefaults.object(forKey: passwordKey) as? String } @IBAction func saveDataToUserDefaults(_ sender: UIButton) { // ここにパスワードチェックの処理を入れる。通過すれば次の2行で保存する。 userDefaults.set(idText.text, forKey: idKey) userDefaults.set(passwordText.text, forKey: passwordKey) }}###ありがとうございました。

 

TAG