tora-muscle / 1weekPDCA

このアプリは一週間をより有意義なものにするために一週間単位で生活を振り返ることができるアプリです
MIT License
0 stars 0 forks source link

👍 ローカル DB への保存機能を追加 #20

Closed tora-muscle closed 1 year ago

tora-muscle commented 1 year ago

🎫 関連課題

✨ 実現したいこと

▼ when?

▼ what?・why?

🚩 やらないこと

🔀 達成条件

👀 備考

tora-muscle commented 1 year ago

✍️ 下調べ、技術選定

▼ SwiftUI で使えるローカル DB には何がある?

▼ どの観点で絞っていく?

▼ firebase に移行しやすいものは?

▼ 1weekPDCA には Firebase Realtime Database と Firebase Cloud Firestore どちらが相応しい?

▼ 結果


📚 参考文献

tora-muscle commented 1 year ago

🐛 TextField に打ち込んだ文字が反映されない

▼ 現象詳細

https://user-images.githubusercontent.com/111550856/223327326-66c23865-06de-4c06-8253-2c3019c3d2cf.mov

▼ 原因考察

func updateTaskTitle(taskCardId: String, with newTaskTitle: String, taskCardManager: TaskCardManager) {

        // ID が一致する要素がなかった場合処理を中断する
        guard let taskCardData = realm.object(ofType: TaskCardData.self, forPrimaryKey: taskCardId) else {
            return
        }

        try! realm.write {
            taskCardData.taskTitle = newTaskTitle
            print("New Text = \(taskCardManager.taskCardData[0].taskTitle)")
            // 状態を更新する
            taskCardManager.reloadTaskCardData()
            print("New Text = \(taskCardManager.taskCardData[0].taskTitle)")
        }
    }
2023-03-07 14:38:24.504300+0900 1weekPDCA[1023:121522] Make a symbolic breakpoint at UICollectionViewFlowLayoutBreakForInvalidSizes to catch this in the debugger.
New Text = タスク1つ目 追加文言 
New Text = タスク1つ目 # DB 状態反映後の text が更新前のものになっている
New Text = タスク1つ目 # 2回呼び出されている
New Text = タスク1つ目

▼ 対応方針

tora-muscle commented 1 year ago

✅ 解決 : TextField に打ち込んだ文字が反映されない

▼ 解決方法

TextField(
                                "task title",
                                text: $taskCardManager.taskCardData[taskIndex].taskTitle,
                                axis: .vertical
                            )
                            .textStyle(for: .title, color: .uiColorGray)
                            .fixedSize(horizontal: false, vertical: true)
                            .onChange(
                                of: taskCardManager.taskCardData[taskIndex].taskTitle,
                                perform: { newValue in
                                    realmDataBaseManager.updateTaskTitle(
                                        taskCardId: taskCardManager.taskCardData[taskIndex].taskId,
                                        with: newValue,
                                        taskCardManager: taskCardManager
                                    )
                                }
                            )

▼ 動作確認

検証環境 : iOS 16.2.3 iPhone12Pro

https://user-images.githubusercontent.com/111550856/223589549-92f8b01e-9e12-4e3a-bb96-2da80c8eb44f.mp4

tora-muscle commented 1 year ago

♻️ View と DB 変更処理を分離させたい

▼ 内容

▼ 対応方針