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

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

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

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

TableView

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Swift

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

Q&A

解決済

1回答

912閲覧

Swift:更新する度に TableView のデータが倍に増える…(読み込み時にリセットしたい)

Y.Kame

総合スコア13

Firebase

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

TableView

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Swift

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

0グッド

0クリップ

投稿2019/08/25 06:42

前提・実現したいこと

Realtime Database に保存しているデータを、TableView に表示しています。
画面を更新する度に、TableView に表示されるデータが倍に増えて困っています・・・

viewDidLoad()を実行する度に一度 TableView の中身をリセット(空)したいのですが方法がわかりません。

お詳しい方がいらっしゃいましたら、ご教示をお願いします。

該当のソースコード

swift

1import UIKit 2 3import Firebase 4import SwiftyJSON 5import FirebaseAuth 6import FirebaseDatabase 7 8class History { 9 10 var time:String? 11 var status:String? 12 var price:Int? 13 14 init(time: String?, status: String?, price: Int?) { 15 self.time = time 16 self.status = status 17 self.price = price 18 } 19 20} 21 22class HomeViewController: UIViewController, UITableViewDelegate, UITableViewDataSource { 23 24 var ref:DatabaseReference! 25 26 // 履歴をテーブルビューに表示 27 var historys = [History]() 28 29 //リストに表示する件数はある分すべてに設定されています 30 func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 31 return historys.count 32 } 33 34 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 35 let cell = tableView.dequeueReusableCell(withIdentifier: "historyCell", for: indexPath) as! HomeViewControllerTableViewCell 36 let history = historys[indexPath.row] 37 cell.timeLabel.text = history.time 38 cell.statusLabel.text = history.status 39 cell.priceLabel.text = "(history.price ?? 0)" 40 return cell 41 } 42 43 44 override func viewDidLoad() { 45 super.viewDidLoad() 46 47 tableView.dataSource = self 48 tableView.delegate = self 49 50 51 LoadHistory() 52 53 } 54 55 56 57 //データベースから履歴に表示させるデータを取り出す 58 func LoadHistory() { 59 60 ref = Database.database().reference().child("Action") 61 ref.queryOrdered(byChild: "number").queryEqual(toValue: argString).observeSingleEvent(of: .value, with: {(snapshot) in 62 for item2 in snapshot.children { 63 let snap2 = item2 as! DataSnapshot 64 let dict2 = snap2.value as! [String: Any] 65 let time = dict2["time"] as? String 66 let status = dict2["status"] as? String 67 let price = dict2["price"] as? Int // "price"は Int型 68 //取得したTimeのデータをプリント 69 print(dict2 as Any) //確認用でdict2を出力(成功) 70 let hist = History(time: time, status: status, price: price) 71 self.historys.append(hist) 72 } 73 self.historys = self.historys.reversed() 74 self.tableView.reloadData() 75 }) 76 } 77 78 override func didReceiveMemoryWarning() { 79 super.didReceiveMemoryWarning() 80 } 81 82 83 84 85} 86 87//今回の事案と関係のないコードは省略しています 88 89

試したこと

毎回データベースから値を取得して追加してるから、viewDidLoad()のはじめに

self.historys = self

と追加してhistorysに入ってるデータを初期化?できるかなと思ったんですが上手くいきませんでした。

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

Swift5
Xcode

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

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

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

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

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

guest

回答1

0

ベストアンサー

for文の前で historys = [] したらいいのではないでしょうか
余談ですがhistoryの複数形はhistoriesです

投稿2019/08/25 06:51

thyda.eiqau

総合スコア2982

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

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

Y.Kame

2019/08/25 06:53

わ〜〜うまくいきました!! = [] でリセットできたんですね・・・ そして綴りのご指摘までありがとうございますお恥ずかしい汗
techkeito

2021/09/09 08:00

私も助かりましたー!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問