1
4

More than 1 year has passed since last update.

userDefaultsに保存した値をTableViewで表示する(swift)

Last updated at Posted at 2021-09-27

概要

userDefaultsに保存した値をTableViewで表示する機能を独学で実装してみました。
storyBoadとラベル配置の説明は省略します。

2021-09-27 16.52のイメージ.jpg

①userDefaultsに保存するための空配列を作成する

ViewController.swift
var saveArray :[String] = []

②textFieldの入力値やpickerで選択した値を配列に追加する

ViewController.swift
var textFieldValue :String = ""
textFieldString = textField.text!
saveArray.append("\(textFieldValue)")

③userDefaultsに保存

ViewController.swift
UserDefaults.standard.set(saveArray, forKey: "1")

④userDefaultsから取り出した後にしまう空配列を作成する

ViewController.swift
    var memoryArray :[String] = []
    var memoryArrayReversed :[String] = [] //並び替え用の配列

⑤userDefaultsから値を取り出す

MemoroyViewController.swift
func readFromUserDefaults(){
        guard let savedArray = UserDefaults.standard.array(forKey: "1") as? [String] else {
        print("値がありません")
        return}

        memoryArray = savedArray
    }

配列が空の可能性があるのでオプショナルバインディングで値を取り出します。

⑥新しいものが上に来る様にしたいので、昇順に配列をソートする

MemoryViewController.swift
    func sort(){
        memoryArrayReversed = memoryArray.reversed()
    }

⑦TableViewで表示

MemoryViewController.swift
//tableViewの設定
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return self.memoryArrayReversed.count
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = UITableViewCell(style: .default, reuseIdentifier: "myCell")
        cell.textLabel?.text = self.memoryArrayReversed[indexPath.row]
        return cell
    }
ViewController.swift
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.

        readFromUserDefaults()
        sort()

        //通知受信
        NotificationCenter.default.addObserver(self, selector: #selector(arrayClear(notification:)), name: .notifyName, object: nil)
    }

⑧userDefaultに保存した値を全削除する機能を追加(アラート付き)

MemoryViewController

    //メモを削除する機能(ユーザーデフォルトの中身を全て削除)
    func killAllUserDefaults (){
        UserDefaults.standard.removeObject(forKey: "1")
    }

    //メモを削除するボタンの実装(アラート付き)
    @IBAction func killUserDefaults(_ sender: Any) {


        let alert: UIAlertController = UIAlertController(title: "Alert!", message: "メモを全て削除します", preferredStyle:  UIAlertController.Style.alert)

        //OKボタンの実装
        let defaultAction: UIAlertAction = UIAlertAction(title: "OK", style: UIAlertAction.Style.default, handler:{
                // OKボタンが押された時の処理
                (action: UIAlertAction!) -> Void in
                print("OK")

                self.killAllUserDefaults()
                self.tableView.reloadData() //!!なぜかリロードしない
                self.dismiss(animated: true, completion: nil)

                //通知送信
                NotificationCenter.default.post(name: .notifyName, object: nil)
            })

        //キャンセルボタンの実装
        let cancelAction: UIAlertAction = UIAlertAction(title: "キャンセル", style: UIAlertAction.Style.cancel, handler:{
                // キャンセルボタンが押された時の処理
                (action: UIAlertAction!) -> Void in
                print("Cancel")
            })

        alert.addAction(cancelAction)
        alert.addAction(defaultAction)

        //Alertを表示
        present(alert, animated: true, completion: nil)

    }
ViewController.swift
    //通知名前空間の拡張
    extension Notification.Name {
       static let notifyName = Notification.Name("notifyName")
    }

    //配列初期化メソッド(notificationCenter通知用)
    @objc func arrayClear(notification :NSNotification){
        saveArray = []
    }

2021-09-28 0.57のイメージ.jpg

2021-09-28 0.59のイメージ.jpg

1
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
4