0

So I made a "like" button in my tableview cell. Every time it's tapped, it updates the value of the number of likes for a certain post. The problem is that when it updates and snapshotListener takes effect, it adds another copy of the data so I'll have duplicates. For example, I have one post with 100 likes; when the "like" button is tapped, I'll have 2 of the same post - one with 100 likes and the other one with 101 likes.

import UIKit
import Firebase



class motivationviewcontroller : UIViewController,UITableViewDataSource ,UITableViewDelegate{


var motivationThoughts = [motivationDailyModel]()
var Mous = motivationDailyModel()
var tableview : UITableView!

override func viewDidLoad() {
    print("madicc")
    
    print("the user logged in is \( String(describing: Auth.auth().currentUser?.email))")
        
    tableview =  UITableView(frame: view.bounds, style: .plain)
           tableview.backgroundColor = UIColor.white
           view.addSubview(tableview)
    
    
    var layoutGuide : UILayoutGuide!
    layoutGuide = view.safeAreaLayoutGuide
    
    let cellNib = UINib(nibName: "dailyMotivationTableViewCell", bundle: nil)
    tableview.register(cellNib, forCellReuseIdentifier: "DailyThoughtCELL")
    tableview.leadingAnchor.constraint(equalTo: layoutGuide.leadingAnchor).isActive = true
    tableview.topAnchor.constraint(equalTo: layoutGuide.topAnchor).isActive = true
    tableview.trailingAnchor.constraint(equalTo: layoutGuide.trailingAnchor).isActive = true
    tableview.bottomAnchor.constraint(equalTo: layoutGuide.bottomAnchor).isActive = true
    
    
    tableview.dataSource = self
    tableview.delegate = self
    
    
    loaddailymotivation()
    self.tableview.reloadData()
    
     
}

override func viewDidAppear(_ animated: Bool) {
  //loaddailymotivation()
    self.tableview.reloadData()
    
}




func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    motivationThoughts.count
   }
 
   func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "DailyThoughtCELL", for: indexPath) as? dailyMotivationTableViewCell
  
        cell!.generateCellsforDailymotivation(_MotivationdataMODEL: self.motivationThoughts[indexPath.row])
        return cell!
   }
      
      
          func loaddailymotivation() {
    
    FirebaseReferece(.MotivationDAILY).addSnapshotListener { (snapshot, error) in
    
        if (error != nil) {
            print(error!.localizedDescription)
        } else{
            
            guard let snapshot = snapshot else {return}
            
            for allDocuments in snapshot.documents {
                
                let data = allDocuments.data()
               
                let dailyMotivationID =  data ["objectID"] as! String
               
                let dailymotivationTitle = data["Motivation title"] as! String //calls the data thats heald inside of motivation title in firebase
                
                let dailyMotivationScripture = data["daily motivation scripture"] as! String //calls the data thats heald inside of Motivation script in firebase
               
                let dailyMotivationNumberOfLikes = data["Number of likes in daily motivation post"]as! Int
                
                let MdataModel = motivationDailyModel(RealMotivationID: dailyMotivationID, RealmotivationTitle: dailymotivationTitle, RealmotivationScrip: dailyMotivationScripture, RealmotivationNumberOfLikes: dailyMotivationNumberOfLikes)
              
                self.motivationThoughts.append(MdataModel)
                self.tableview.reloadData()
                
          }
        }
        
     }
   }
auspicious99
  • 3,902
  • 1
  • 44
  • 58
Rayisooo
  • 122
  • 8

2 Answers2

3

You are correctly loading data from Firebase.

However, before self.motivationThoughts.append(MdataModel), you need to clear the previous data, otherwise it would just append the fresh data to what you had previously, which I believe explains what you are seeing.

Something like self.motivationThoughts.removeAll() will do it.

auspicious99
  • 3,902
  • 1
  • 44
  • 58
2

Can you try to remove all item in your array before append it

self.motivationThoughts.removeAll() 
self.motivationThoughts.append(MdataModel)
self.tableview.reloadData()
aiwiguna
  • 2,852
  • 2
  • 15
  • 26