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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Realm

RealmとはSQLiteやCore Dataに代わるモバイルデータベースです。iOSとAndroidの両方でサポートされています。

TableView

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

Xcode

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

Swift

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

Q&A

解決済

2回答

1622閲覧

TableViewにインスタンスの値を順番に表示させる

nakamuraa

総合スコア26

Realm

RealmとはSQLiteやCore Dataに代わるモバイルデータベースです。iOSとAndroidの両方でサポートされています。

TableView

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

Xcode

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

Swift

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

0グッド

0クリップ

投稿2019/02/17 12:50

編集2019/02/18 01:49

こんにちは!プログラミング初心者で現在アプリを作成中です。
現在はRealmとFSCalendarを使って、カレンダーアプリを作成中です。
至らないところも多々ありますが、ご教示いただけたら嬉しいです。

前提・実現したいこと

TableViewのCellに配列のインスタンスの値を順番に入れていきたいです。
例えば、
class Event: Object {
@objc dynamic var beer: Int
@objc dynamic var highball: Int
@objc dynamic var wine: Int
}
というクラスでTableViewのCell内のtextLabelに
---ーーー---ーーー
"(event.beer)"
---ーーー---ーーー
"(event.highball)"
---ーーー---ーーー
"(event.wine)"
---ーーー---ーーー
という値を入れていきたいのですが、やり方がわかりません。。
ご教示頂ければ幸いです。
Cell内に配列の値を入れていくまではできましたので以下に該当コードを載せておきます。

具体的には以下の図のように、カレンダーをタップするとその日付と紐付けされたデータがTableViewに表示されるようにしたいです。
イメージ説明

該当のソースコード

swift

1class Event: Object { 2   @objc dynamic var date: String = "" 3 @objc dynamic var beer: Int 4 @objc dynamic var highball: Int 5 @objc dynamic var wine: Int 6}

swift

1var selectedDate: Date? 2let kindofdrinks = ["beer", "highball", "wine", "cocktail"] 3 //Tableview用 4 func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 5 return 4 6 } 7 8 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 9 // セルを取得する 10 let cell: UITableViewCell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) 11 //selectedDateがnilではない場合 12 if let date = selectedDate{ 13//カレンダー上のタップした日付を取得 14 let formatter = DateFormatter() 15 formatter.dateFormat = "yyyy/MM/dd" 16 let drunkday = formatter.string(from: date) 17//Realmでデータを取得 18 let realm = try! Realm() 19 let events = realm.objects(Event.self).filter("date == %@", drunkday) 20 //ここからの処理がわかりません、、、、TableViewのCell上に日付と紐づいたEventインスタンスの値を順番に表示させたいのですが、、、 21 cell.textLabel?.text = kindofdrinks[indexPath.row] 22 return cell 23 }else{ 24 cell.textLabel?.text = "" 25 return cell 26 } 27 }

補足情報(FW/ツールのバージョンなど)

Xcode Version 10.1
Swift version 4.2.1

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

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

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

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

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

fuzzball

2019/02/18 00:21 編集

なぜセルを1個表示(生成)するたびにdbからデータを取ってきているのでしょうか?
nakamuraa

2019/02/18 01:49

質問の修正行いました。
fuzzball

2019/02/18 01:58 編集

質問の修正が、私の質問への回答になっていません。 1つのデータから3つ(4つ?)のセルを生成するのではないのですか?
nakamuraa

2019/02/20 13:53

すいません!!公式のドキュメントも見ましたが、初心者の自分でどこの部分がdbからセルごとにデータを取得しているのかがわかりませんでした、、、 もしよろしければ、どの部分が原因でセルごとにデータを取りに行っているのか教えていただけないでしょうか?? よろしくお願い致します。
guest

回答2

0

Realm使ったことは無いので適当な事を書きます。

fuzzballさんも指摘されていますが、現状ではテーブルセル構築のたびにDBを読みに行っているので、カレンダーをタップした時点でDBへ読みに行くように変えてください。

次ですが、

let events = realm.objects(Event.self).filter("date == %@", drunkday)

↑の結果は配列か何かですよね?

なのでif let event = events.firstか何かでインスタンスを1つに特定してから、kindofdrinks変数に対してお好きなように代入すれば良いかと思います(kindofdrinks[0] = "(event.beer)"など)。

細かいところは試行錯誤してください。

投稿2019/02/18 08:50

takabosoft

総合スコア8356

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

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

0

ベストアンサー

公式ドキュメント

swift

1// ViewControllerに下記のプロパティを追加します。クラスの宣言のすぐ下に書いてください。 2 3var items = List<Task>() 4 5// viewDidLoad()メソッドの最後に初期データとしてダミーデータを作成するコードを記述します。 6 7override func viewDidLoad() { 8 // ... existing function ... 9 items.append(Task(value: ["text": "My First Task"])) 10}

このようになっています。すでに回答がついていますが、最初にデータを用意し、それからdelegateなどに合わせてデータを設定するようにしています。
カレンダーなら、たとえば1ヶ月分のデータをあらかじめ配列に入れておき、そこからセルに設定するイメージとなります。

投稿2019/02/21 01:00

t_obara

総合スコア5488

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

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

nakamuraa

2019/02/22 12:30

ありがとうございます!! 空配列を用意して、タップ動作の時にappendで追加していくと思っている機能が実装されました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問