###前提・実現したいこと
Swift初心者です。
現在、iOSアプリ作成の練習として家計簿アプリを作成しています。
これまで、
- CoreDataに「年月日、カテゴリ(食費など)、費用」を保存。
- 保存したデータをTableViewに表示。
- データを追加したらfetchedResultsControllerを用いてリアルタイムでTableViewに反映。
- TableViewのセルをタップするとその出費データの修正ができる(それもリアルタイムで反映)。
というところまで実装することができました。
しかし、指定された月の出費データのみをTableViewに表示する方法がわかりません。
CoreDataに保存されている出費データすべてをTableViewに表示してしまいます。
ようするに、今月のデータのみをCoreDataから持ってきてTableViewに表示する、先月のデータのみを見たいときは、何らかの方法で画面を切り替えて先月のデータのみで構成されたTableViewを表示する、などということができません。
###発生している問題・エラーメッセージ
TableViewに特定の月のデータだけを表示する方法はありませんか?
(現在モデルとエンティティを1つずつ使用していますが、複数のモデルまたはエンティティを用意するべきでしょうか? その場合はどのようにしてモデル・エンティティを切り替えればいいでしょうか? それとも、CoreDataに保存されているデータのうち、特定のデータのみを選択してTableViewに表示する方法はありますか?)
###該当のソースコード
https://github.com/MasayaHayashi724/Kakeibo
に置いてあります。
ViewController.swiftに質問のTableViewを構成するコードが書いてありますので、そこを中心に見ていただけるとありがたいです。
###試したこと
- モデルを月ごとに用意し、TableViewごとにモデルを切り替えれば良いのでは、と思い試してみましたが、「Spending」というエンティティを共通にしたため、Spendingというクラスは曖昧だからダメと言われました。かといってエンティティを別名にすると、fetchedResultsControllerを作成するコードを複数用意しないといけないと思うので、スマートではないかな、と思いました(まだ試していません)。
- 表示したい月以外のデータを表示するセルは非表示にすればいいと思い、TableViewのデータソースでそれを試しましたが、非表示にしたデータの部分が真っ白になるだけで、セルごと消えてくれませんでした。
###コードの軽い解説
CoreDataのモデルは「Spendings.xcdatamodeld」というモデルで、「Spending」というエンティティが「year」「month」「day」「category」「cost」という属性を持っています。
年月日とカテゴリはそれぞれPickerViewで選択し、それらをそのDelegateでmyDate[]やmyCategoryという変数に代入しています。
そして、それらのデータをCoreDataへ保存しています。
それらのデータ追加処理は「AddSpendingViewController.swift」という別ファイルで書いていますが、そちらはTalbeViewと関係がなさそうなので記載していません(そちらも見てみないと何とも言えないようでしたら、追記します)。
他に必要なコードがありましたら記載しますので、よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー