2017-01-05 7 views
1

Firebaseに新しいデータを追加したり、Firebaseコンソールでデータを更新するたびに、私のtableViewデータが重複します。私が追ってきたudemyチュートリアルでは、この問題の解決方法は示されていませんでした。 A Google searchが私の問題を引き起こしましたが、問題の根本を説明できないようでした。私は問題の根本から答えただけではない。私は一緒に行くように学習していますが、この1つは私にバグです。Firebase duplicate table新しい日付が追加、更新、削除されたときの表示

1つの答えはself.members.removeAll()ですが、Swift 3を使用していますが、その理由は何ですか?

私の問題はthisに関連していますが、その回答はあいまいであり、本当に答えではありませんでした。私はconfigureCell()を持っていますが、何を追加すべきですか?

誰かが説明し答えを加えるだけで私の質問の答えのほとんどをアップします。何が起こっているのですか、なぜですか?

if let cell = tableView.dequeueReusableCellWithIdentifier("PostCell") as? PostCell{...} 

編集:

var expenses = [Expense]() 

func numberOfSections(in tableView: UITableView) -> Int { 
     return 1 
    } 

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     return expenses.count 
    } 

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 

     let expense = expenses[indexPath.row] 

     if let cell = tableView.dequeueReusableCell(withIdentifier: "expenseFeedCell") as? ExpenseFeedCell { 
      cell.selectionStyle = .none 
      cell.configureCell(expense: expense) 
      return cell 
     } else { 
      return ExpenseFeedCell() 
     } 

    } 

と費用のクラス:

class Expense { 

    // Private variables 
    private var _date: Double! 
    private var _type: String! 
    private var _amount: Double! 
    private var _notes: String! 
    private var _expenseId: String! 


    // Setting up the getteres 
    var type: String { 
     return _type 
    } 

    var date: Double { 
     return _date 
    } 

    var amount: Double { 
     return _amount 
    } 

    var notes: String { 
     return _notes 
    } 

    var expenseId: String { 
     return _expenseId 
    } 

    init(type: String, date: Double, amount: Double, notes: String) { 
     self._type = type 
     self._date = date 
     self._amount = amount 
     self._notes = notes 
    } 

    init(expenseId: String, expenseData: [String: AnyObject]) { 
     self._expenseId = expenseId 

     if let type = expenseData["type"] as? String { 
      self._type = type 
     } 

     if let date = expenseData["date"] as? Double { 
      self._date = date 
     } 

     if let amount = expenseData["amount"] as? Double { 
      self._amount = amount 
     } 

     if let notes = expenseData["notes"] as? String { 
      self._notes = notes 
     } 

    } 
} 

答えて

0

あなたが読むために使用firebase方法の場合に、私はで何かを削除/再ロードする必要がありますか新しいエントリがあるたびにデータが呼び出されるため、データを追加する前にデータ配列の内容を削除する必要があります。

したがってfirebaseメソッドでは、空の配列を持つことから始めます。その後、スナップショットで処理し、同じ配列を埋め込むことができます。

self.tableView.reloadData()を追加すると、この配列の新しいデータでビューを再読み込みします。

+0

こんにちは。説明してください、私は 'self.member'が私のコードではありません。 'cellForRowAt'を更新する必要がありますか? 「私の問題はこれに関連している」というリンクは、私のコードをかなり要約していますか? – Sylar

+0

データが複製されるときにnumberOfRowsInSectionを返す数値の数はいくつですか? – Grifas

+0

私は現在3を持っていますが、私が更新すれば6になる3回返します。私は新しいデータを投稿する場合7。 – Sylar

関連する問題