2017-08-21 7 views
0

にこのコードで変更を適用するために複製されています。私は自分のデータベースのスナップショットを取得し、そのデータをtableViewに読み込むことができます。しかし、オンラインデータベースを変更しようとすると、この変更を適用する通常のセルの代わりに変更を適用するセルが複製されます。私のセルは、オンラインデータベース

// Create reference to databse 
    ref = Database.database().reference() 

    // Retrieve data from firebase database and listen for changes 
    ref.child("Clubs").observe(.value, with: { (snapshot) in 
     print("clubs: \(snapshot)") 

     if(snapshot.exists()) { 
      let array:NSArray = snapshot.children.allObjects as NSArray 

      for obj in array { 
       let snapshot:DataSnapshot = obj as! DataSnapshot 
       if let childSnapshot = snapshot.value as? [String : AnyObject] { 
        print("myClubs: \(childSnapshot)") 

        if let clubName = childSnapshot["name"] as? String, let banner = childSnapshot["bannerImage"] as? String { 
         print(clubName) 
         print(banner) 

         let club = Club(name: clubName, image: banner) 
         print("new club success: \(club)") 
         self.nightClubs.append(club) 
        } 
       } 
      } 

      DispatchQueue.main.async { 
       self.tableView.reloadData() 
      } 

     } 

    }) 

答えて

2

Clubs変化の任意の値は、あなたがリスナー内のコードを実行しているときはいつでも。コードはクラブをnightClubs配列に追加しますが、クリアしません。再パックする前に配列を空にする必要があります。

// Retrieve data from firebase database and listen for changes 
    ref.child("Clubs").observe(.value, with: { (snapshot) in 
     print("clubs: \(snapshot)") 
     self.nightClubs.removeAll() // empty array before adding values 

     ... 
+0

ありがとうございました!文字通りちょうど私の人生を救った –

+1

助けてくれてうれしい!この回答がうまくいったら、それを受け入れてください。ありがとう! –

関連する問題