質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Core Data

Core DataはAppleのOS X and iOSのためのオブジェクトモデリングと持続性を持ったフレームワークです。Xcodeはエンティティー、属性そして関係性を特定するためのオブジェクトモデルの編集機能を提供します。

TableView

TableView(UITableView)とは、リスト形式で表示するコントロールで、ほとんどのアプリに使用されています。画面を「行」に分けて管理し、一般的には各行をタップした際に詳細画面に移動します。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

2001閲覧

Swift3/Xcode8でCoreDataに保存したデータのうち、特定データのみTableViewに表示する方法

退会済みユーザー

退会済みユーザー

総合スコア0

Core Data

Core DataはAppleのOS X and iOSのためのオブジェクトモデリングと持続性を持ったフレームワークです。Xcodeはエンティティー、属性そして関係性を特定するためのオブジェクトモデルの編集機能を提供します。

TableView

TableView(UITableView)とは、リスト形式で表示するコントロールで、ほとんどのアプリに使用されています。画面を「行」に分けて管理し、一般的には各行をタップした際に詳細画面に移動します。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2017/01/25 07:27

###前提・実現したいこと
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と関係がなさそうなので記載していません(そちらも見てみないと何とも言えないようでしたら、追記します)。
他に必要なコードがありましたら記載しますので、よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

t_obara

2017/01/25 09:58 編集

CoreData(あるいはリレーショナルDBMS等)では、データを検索する際に、条件で絞り込みをすることが可能です。その仕組みがCoreDataの場合、NSPredicateクラスで実現できます。まずはそちらを調査してみてはいかがですか。
退会済みユーザー

退会済みユーザー

2017/01/25 16:27

NSPredicateクラスでできそうな気がするので、調べて実装してみます。助言ありがとうございました。
guest

回答1

0

ベストアンサー

アドバイスをいただいたとおり、NSPredicateクラスを用いてデータをfetchするときに条件を指定してあげれば、うまく欲しいデータのみをCoreDataから持ってくることができました。
CoreDataを使う上でかなり便利で、使えて当たり前くらいのクラスだと思うので、まだまだ勉強不足です。
アドバイスありがとうございました。

投稿2017/01/28 08:38

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問