[SwiftUI]What I wear counter/着た回数カウンタ - (4) Update CoreData
- handmadeapp
- 2020年2月3日
- 読了時間: 2分
更新日:2020年2月18日
着た回数カウントアプリの続きです。
今日は、追加されたItemから「今日着たものを登録する」部分。
完成イメージは、こんな感じ。

①Edit時のView作成
②EditViewのチェックボックスアクション
③「Register」ボタンタップ時のCoreData更新
④「Register」ボタンタップ後のアラートメッセージ&画面遷移
に切り分けて順に作っていきます。
①Edit時のView作成
通常時は、リスト項目の選択→Detail Viewへの遷移になるので、
ItemRow自体を分けることに。
ItemRowとは別に、ItemRowEditを作成。
<ItemRow> 変更なし
※「③「Register」ボタンタップ時のCoreData更新」の準備として、
count_after_washなど回数を保持する変数の定義をStringからInt16に変更。
それに伴い、Textに設定する際、Stringへの変更だけ追記しています。
<ItemRowEdit> 新規作成
チェックボックスは、Buttonでタップ毎に「isChecked」変数をToggleし、
「isChecked」の内容に応じてLabelの表示アイコンを変更する形に。
<ContentView>
・NavigationBarにEditボタン追加(Edit中はTextの表示を「Cancel」に)
・Edit時は「Register what I wear today」ボタンを表示
・ItemRow、ItemRowEditの出し分け
②EditViewのチェックボックスアクション
チェックボックスで選択されたItem情報を保存しておき、
「Register」ボタンタップ時に参照、CoreDataに反映する必要がある。
「selections」というArrayを用意して、チェックボックスがタップされた時に、
・未選択→選択:Arrayに追加
・選択→未選択:Arrayから削除(名前の一致を検索して削除)
することに。
名前は必ずユニークである前提の仕様。。。
まぁ、使ってみて不便があったらItem追加時のチェックなどを入れて対応すれば良いかな。
③「Register」ボタンタップ時のCoreData更新
変更対象のItemの名前が登録された「selections」Arrayのそれぞれについて、
洗った回数を+1するFunctionを作成。
これを、「Register」ボタンから呼び出す。
④「Register」ボタンタップ後のアラートメッセージ&画面遷移
最後に、「Register」ボタンタップ後に
・Alert表示
・Alert確認(OKタップ)後、selectionsに設定されていた値をクリア ・Alert確認(OKタップ)後、EditView解除
するよう「Register」ボタンに機能追加。
以上、CoreDataの更新ができるようになりました。

![[SwiftUI]What I wear counter/着た回数カウンタ - (8) Modifier](https://static.wixstatic.com/media/0805bc_7d8cbbd5fec942429b7156993daece12~mv2.png/v1/fill/w_980,h_343,al_c,q_85,usm_0.66_1.00_0.01,enc_avif,quality_auto/0805bc_7d8cbbd5fec942429b7156993daece12~mv2.png)
![[SwiftUI]What I wear counter/着た回数カウンタ - (7) Local Notification](https://static.wixstatic.com/media/0805bc_1bf0e54f5beb41e7a98f0b41df3c4c82~mv2.png/v1/fill/w_980,h_745,al_c,q_90,usm_0.66_1.00_0.01,enc_avif,quality_auto/0805bc_1bf0e54f5beb41e7a98f0b41df3c4c82~mv2.png)
![[SwiftUI]What I wear counter/着た回数カウンタ - (6) Switch View by User Input](https://static.wixstatic.com/media/0805bc_546c7ee620d14e8bad2c76e49bde97fc~mv2.png/v1/fill/w_980,h_519,al_c,q_90,usm_0.66_1.00_0.01,enc_avif,quality_auto/0805bc_546c7ee620d14e8bad2c76e49bde97fc~mv2.png)
コメント