Sadi Hakan
Sadi Hakan

Reputation: 231

How to clear TableView and reload data again?

I have a function like this and when I reload with button this function collectionViewTable shows same data second time .How can I solve it ??

func getWallpaperFromDB(){
        let databaseRef = Database.database().reference()
        databaseRef.child("wallpapers").observe(DataEventType.childAdded) { (snapshot) in
            if let value = snapshot.value! as? [String: Any] {
                let categoryID = value["categoryID"] as! String
                let categoryName = value["categoryName"] as! String
                let wallpaperName = value["wallpaperName"] as! String
                let wallpaperId = snapshot.key
                let DBWallpaper = Wallpaper(categoryID: categoryID, categoryName: categoryName, wallpaperId: wallpaperId, wallpaperName: wallpaperName)
                self.wallpapers.append(DBWallpaper)
                self.collectionViewTable.reloadData()
            }

        }
    }

@IBAction func slideMenuButton(_ sender: Any) {
        getWallpaperFromDB()
    }

Upvotes: 0

Views: 1807

Answers (2)

Teja Goud Kandula
Teja Goud Kandula

Reputation: 1574

You can empty your wallpapers array inside the closure function. That way every time the function is called the wallpapers array will be empty before the data is being fetched again. That way you won't have duplicate data.

func getWallpaperFromDB(){

        let databaseRef = Database.database().reference()
        databaseRef.child("wallpapers").observe(DataEventType.childAdded) { (snapshot) in
            
            self.wallpapers = [] 
            
            if let value = snapshot.value! as? [String: Any] {
                let categoryID = value["categoryID"] as! String
                let categoryName = value["categoryName"] as! String
                let wallpaperName = value["wallpaperName"] as! String
                let wallpaperId = snapshot.key
                let DBWallpaper = Wallpaper(categoryID: categoryID, categoryName: categoryName, wallpaperId: wallpaperId, wallpaperName: wallpaperName)
                self.wallpapers.append(DBWallpaper)
                self.collectionViewTable.reloadData()
            }

        }
    }

@IBAction func slideMenuButton(_ sender: Any) {
        getWallpaperFromDB()
    }

Upvotes: 1

Shehata Gamal
Shehata Gamal

Reputation: 100503

You need to clear every call

@IBAction func slideMenuButton(_ sender: Any) {
    wallpapers.removeAll()
    getWallpaperFromDB()
}

Upvotes: 1

Related Questions