my tableview cells duplicate each time I log out and log in again

the app I am building has authentication functionalities (Firebase). you log in and a segue leads to a tableview with hard-coded tableview cells. There is a log out button that redirects to the login screen.

My problem is that each time I log out and log in again, my table view cell duplicate once. Tapping on one the duplicates breaks the app.

I built the data used to populate my tableview in a separate file. first I built a class, then an array, then a function containing objects based on that class and which I then append to the array.

In order to populate my tableview cells, I call that function in the view controller that contains my table view cells, in viewDidLoad.

He is my code for the class and function:


class ContenuCellule {

    let titreLabel : String
    let titreImage : String

    init(label : String, image : String) {
        titreLabel = label
        titreImage = image
    }
}


//MARK: On cree un tableau qui contient les noms de toutes les images
var tableauImages = ["mbigiMuntu1", "taureauDeboeuf1", "billets1", "baronSamedi1", "temple" ]
//MARK: On cree ensuite un tableau qui va renfermez la structure de chaque cellule de notre application
var tableauDonnees = [ContenuCellule]()

//MARK: Enfin on cree une fonction qui va detailler le contenu de chaque cellule de l'application

func contenuDeChaqueCellule () {
    // on cree des objets sur la base de la classe plus haut
    let chapitre1 = ContenuCellule(label: "Le Mbigi Muntu", image: tableauImages[0])
    let chapitre2 = ContenuCellule(label: "Taureau de boeuf", image: tableauImages[1])
    let chapitre3 = ContenuCellule(label: "Les billets ensorcelés", image: tableauImages[2])
    let chapitre4 = ContenuCellule(label: "Baron Samedi", image: tableauImages[3])
    let chapitre5 = ContenuCellule(label: "Le temple maudit", image: tableauImages[4])

    // on ajoute ces objets au tableau tableauDonnees
    tableauDonnees.append(chapitre1)
    tableauDonnees.append(chapitre2)
    tableauDonnees.append(chapitre3)
    tableauDonnees.append(chapitre4)
    tableauDonnees.append(chapitre5)
}

And here is my code for the viewDidload :

        super.viewDidLoad()

        // Uncomment the following line to preserve selection between presentations
        contenuDeChaqueCellule()
        print("table view cell displayed")
        // on affiche uniquement les cellules pleines
        tableView.tableFooterView = UIView()
    }

2 answers

  • answered 2019-12-09 13:25 Sh_Khan

    It appears that

    var tableauDonnees = [ContenuCellule]()
    

    is a global array ( declared outside of the vc ) make it local , or

    func contenuDeChaqueCellule () {
      tableauDonnees.removeAll()
    

  • answered 2019-12-09 13:36 Dr M.

    Please add this line to "contenuDeChaqueCellule" function like this:

    func contenuDeChaqueCellule () {
    
        // initiate the tableauDonnees array
        tableauDonnees = [ContenuCellule]()
    
        // on cree des objets sur la base de la classe plus haut
        let chapitre1 = ContenuCellule(label: "Le Mbigi Muntu", image: tableauImages[0])
        let chapitre2 = ContenuCellule(label: "Taureau de boeuf", image: tableauImages[1])
        let chapitre3 = ContenuCellule(label: "Les billets ensorcelés", image: tableauImages[2])
        let chapitre4 = ContenuCellule(label: "Baron Samedi", image: tableauImages[3])
        let chapitre5 = ContenuCellule(label: "Le temple maudit", image: tableauImages[4])
    
        // on ajoute ces objets au tableau tableauDonnees
        tableauDonnees.append(chapitre1)
        tableauDonnees.append(chapitre2)
        tableauDonnees.append(chapitre3)
        tableauDonnees.append(chapitre4)
        tableauDonnees.append(chapitre5)
    }
    

    And after that you need to reload your table view.