質問: ### 前提・実現したいこと 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と関係がなさそうなので記載していません(そちらも見てみないと何とも言えないようでしたら、追記します)。 他に必要なコードがありましたら記載しますので、よろしくお願いします。
回答: アドバイスをいただいたとおり、NSPredicateクラスを用いてデータをfetchするときに条件を指定してあげれば、うまく欲しいデータのみをCoreDataから持ってくることができました。 CoreDataを使う上でかなり便利で、使えて当たり前くらいのクラスだと思うので、まだまだ勉強不足です。 アドバイスありがとうございました。