yasasii-team / Stepippo-iOS

初めての一歩を応援するアプリのiOS版
https://github.com/yasasii-team/Stepippo-iOS.git
21 stars 5 forks source link

変更した期間をUserDefaultsで保存 #170

Closed eyener3 closed 5 years ago

eyener3 commented 5 years ago

fixes #158

(#の後にcloseしたいissueの番号を記述してください)

Summary(要約)

Other Information(他の情報)

Tested(テストしたこと)

Must Reviewer(必須レビュアー)

Sab-swiftlin commented 5 years ago

どこで悩まれていますか??

eyener3 commented 5 years ago

どこで悩まれていますか??

sabさん、ありがとうございます(>人<;) 悩んでいることは、実装全般です..😫

色々と沢山ググっていくつか参考となるサイトも見つけて、 色々とコードも書いてみたのですが、 結局、目指すゴールへはたどり着けませんでした。。

これに沿ってやっていこうと思った情報は 以下の二つです🙇🏻‍♀️ https://qiita.com/KokiEnomoto/items/c79c7f3793a244246fcf https://developer.apple.com/documentation/foundation/userdefaults

Nextinnovation-Koki commented 5 years ago

自分が書いているコードを見せていただければアドバイスしやすいです!

Sab-swiftlin commented 5 years ago

UserDefaults.standardはUserDefaults.standard.set(true, forKey: "periodUpdate")という使い方をしても、あらかじめインスタンスを保持して使っても結果は同じです。 なので、どちらで書いても目的は達成されると思います。 UserDefaultsはKeyとValueをセットにしてアプリ毎に決められた特定の領域にデータを保存する仕組みのため、上記の記述だとperiodUpdateというKeyに対してtrueというValueを保存した事になります。

今回あいなーさんが実装したいのは、アクションシートでユーザーが設定を変更した場合にそれを保存する事だと思います。 そうなると、データを保存するタイミングはユーザーが設定を変更したタイミングでなければなりません。

今回のコードでアプリ側がユーザーの設定変更を検知できるのはどのタイミングでしょうか?? これに気付けると一つ前に進むと思いますよ!

eyener3 commented 5 years ago

今回のコードでアプリ側がユーザーの設定変更を検知できるのはどのタイミングでしょうか?? これに気付けると一つ前に進むと思いますよ!

sabさん、ありがとうございます(>人<;)!! ユーザーの設定変更を検知できるタイミングは、 Action sheetで期間を選択した時でしょうか?m(._.)m

eyener3 commented 5 years ago

自分が書いているコードを見せていただければアドバイスしやすいです!

kokiさん、ありがとうございますm(._.)m 全体のコードはこちらになります(>人<;)

import UIKit

final class ProgVC: UIViewController {

    @IBAction private func checkClicked1(_ sender: CheckButton) {
         animate(button: sender)
    }

    @IBAction func checkClicked2(_ sender: CheckButton) {
         animate(button: sender)
    }

    @IBAction func checkClicked3(_ sender: CheckButton) {
         animate(button: sender)
    }

    private func animate(button: UIButton) {
        UIView.animate(withDuration: 0.1,
                       delay: 0.1,
                       options: [.curveLinear, .autoreverse],
                       animations: {
                        button.transform = CGAffineTransform(scaleX: 0.5, y: 0.5)},
                       completion: { _ in
                        button.transform = CGAffineTransform.identity
                        button.isSelected.toggle()
        })
    }

    @IBAction func didTapSeselectPeriodButton() {
        // アクションシートのタイトルとメッセージ
        let actionSheet = UIAlertController(title: "期間変更", message: "達成したい目標期間を選択してください", preferredStyle: .actionSheet)

        // 選択肢と、選択肢ごとの処理
        // handlerで指定した処理が、ボタン押下時に行われる
        let period1 = UIAlertAction(title: "毎日", style: .default, handler: actionSheetChoose(sender:))
        let period2 = UIAlertAction(title: "毎週", style: .default, handler: actionSheetChoose(sender:))
        let period3 = UIAlertAction(title: "毎月", style: .default, handler: actionSheetChoose(sender:))
        let cancel = UIAlertAction(title: "キャンセル", style: .cancel, handler: {
            (action: UIAlertAction) -> Void in
            print("キャンセルしました")
        })
        // アクションシートに、定義した選択肢を追加する
        actionSheet.addAction(period1)
        actionSheet.addAction(period2)
        actionSheet.addAction(period3)
        actionSheet.addAction(cancel)

        // アクションシートを表示する
        present(actionSheet, animated: true, completion: nil)

    // UserDefaults のインスタンス
        _ = UserDefaults.standard
         UserDefaults.standard.set(true, forKey: "periodUpdate")
    }

    // アクションシートで選択した時の処理
    private func actionSheetChoose(sender: UIAlertAction) {
        print("\(sender.title!)に変更しました")
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.

    }
}

実装したはずのコードがなかったので、追記しました(>人<;)

Sab-swiftlin commented 5 years ago

ユーザーの設定変更を検知できるタイミングは、Action sheetで期間を選択した時でしょうか?m(._.)m

そうですね! では、Action sheetでユーザーが期間を選択した時に呼ばれるメソッド内でユーザーが選択したものを保存する必要がありそうですね。

eyener3 commented 5 years ago

では、Action sheetでユーザーが期間を選択した時に呼ばれるメソッド内でユーザーが選択したものを保存する必要がありそうですね。

アクションシートで選択した時の処理のメソッド内に書くのが正しいということになるのでしょうか?m(._.)m

Sab-swiftlin commented 5 years ago

お返事おそくなりすいません。

アクションシートで選択した時の処理のメソッド内に書くのが正しいということになるのでしょうか?

そうですね! アクションシートで選択された時に呼ばれるメソッドはどれか分かりますか?

eyener3 commented 5 years ago

アクションシートで選択された時に呼ばれるメソッドはどれか分かりますか?

ありがとうございます^-^! メソッドは、actionSheetChooseでしょうか?(>人<;)

Sab-swiftlin commented 5 years ago

正解です! そこで選択された値を保存すれば良さそうですね。

eyener3 commented 5 years ago

正解です! そこで選択された値を保存すれば良さそうですね。

よかったぁ..><!! sabさん、本当にありがとうございます(>人<;) 一つ一つ紐解きながら理解することができました☺️🙇🏻‍♀️

eyener3 commented 5 years ago

実装終わりましたm(._.)m

eyener3 commented 5 years ago

pushしました^-^

eyener3 commented 5 years ago

ありがとうございます😊