前提・実現したいこと
TextFieldに入力した数字をLabelに加算していく事を作りたく、(1回目TextFieldに100を入力→Labelに100表示、2回目TextFieldに100入力→Labelに1回目の100に2回目の100を足した数、合計200をLabelに表示)
合計をLabelに表示する段階は作れたのですが、アプリを再起動しても消えないようにUserDefaultsを使い保存したく作っているのですが、再起動したらLabelにしっかり再起動前の数字がしっかりと表示されたいるのですが、addViewControllerに移動しTextFieldに数字を入力したら、LabelにはUserDefaultsで保存されていた数字に足したいのですが、リセットされていて再起動後のTextFieldに入力された数字だけの表示になってしまいます。
該当のソースコード
import UIKit class ViewController: UIViewController { @IBOutlet weak var label: UILabel! override func viewDidLoad() { super.viewDidLoad() } override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) if let _ = UserDefaults.standard.object(forKey: "textKey") as? String { label.text = (UserDefaults.standard.object(forKey: "textKey") as! String) } } }
import UIKit var aText:Int = 0 class addViewController: UIViewController { @IBOutlet weak var textField: UITextField! override func viewDidLoad() { super.viewDidLoad() // textFieldの入力方法をナンバーパッドに設定 textField.keyboardType = UIKeyboardType.numberPad } override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) } } @IBAction func addButton(_ sender: Any) { let textB = Int(textField.text!) aText = aText + textB! UserDefaults.standard.set(String(aText), forKey: "textKey") } }
試したこと
UserDefaultsの基本的な部分などを調べているのですが、改善できていません。
現段階では、addViewControllerを表示した時にUserDefaultsの存在確認を行えば良いのではないかと考え、以下のコードを書いたのですが、解決していない状況です。
ご教示頂ければ幸いです。宜しくお願いします。
import UIKit var aText:Int = 0 class addViewController: UIViewController { @IBOutlet weak var textField: UITextField! override func viewDidLoad() { super.viewDidLoad() // textFieldの入力方法をナンバーパッドに設定 textField.keyboardType = UIKeyboardType.numberPad } override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) if let _ = UserDefaults.standard.object(forKey: "textKey") as? Int { aText = (UserDefaults.standard.object(forKey: "textKey") as! Int) } } @IBAction func addButton(_ sender: Any) { let textB = Int(textField.text!) aText = aText + textB! UserDefaults.standard.set(String(aText), forKey: "textKey") } }
3/7日 解決
以下のコードで解決に至りました。ありがとうございます。
import UIKit class ViewController: UIViewController { @IBOutlet weak var label: UILabel! override func viewDidLoad() { super.viewDidLoad() } // ViewControllerを開く度に中の処理が呼ばれる override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) // UserDefaultsに保存された数字が無いか確認する if let _ = UserDefaults.standard.object(forKey: "textKey") as? String { // UserDefaultsに保存されたaTextの値をlabelに表示する label.text = (UserDefaults.standard.object(forKey: "textKey") as! String) // アプリ再起動後もaddViewControllerで引き続き計算出来るように、labelに表示されている値をUserDefaultsにtext2Keyとして保存する。 UserDefaults.standard.set(Int(label.text!), forKey: "text2Key") } } }
import UIKit // 初期値を0に設定した変数aTextを作成 var aText:Int = 0 class addViewController: UIViewController { @IBOutlet weak var textField: UITextField! override func viewDidLoad() { super.viewDidLoad() // textFieldの入力方法をナンバーパッドに設定 textField.keyboardType = UIKeyboardType.numberPad } override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) // addViewControllerを開く度にViewControllerのviewDidAppearでUserDefaultsで保存したlabelの値がある場合は、aTextに反映させてaddButton内で引き続き計算出来る様にする。 if let _ = UserDefaults.standard.object(forKey: "text2Key") as? Int { aText = (UserDefaults.standard.object(forKey: "text2Key") as! Int) } } @IBAction func addButton(_ sender: Any) { // iBにtextFieldに入力された数字を入れる guard let iB = Int(textField.text!) else { return } // aTextにiBの数字を入れて、aTextに入れる。 aText = aText + iB // UserDefaultsにaTextの値をtextKeyで保存する UserDefaults.standard.set(String(aText), forKey: "textKey") } }
補足情報(FW/ツールのバージョンなど)
Swift4 Xcode10
回答1件
あなたの回答
tips
プレビュー