更新tableview而不重新加载视图(Swift,Firebase)

时间:2017-09-18 08:59:24

标签: ios swift firebase tableview

所以我试图从数据库中获取所有收藏夹以显示在tableview中。但是,当我最喜欢用户时,它只显示一个。

我的数据库结构如下:

Favourites:
       UserID:
            key: User 1
            key: User 2

和我的代码:

var usersArray[UserClass]()

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(true)

    fetchFavourites()

}

func fetchFavourites () {
    let userID = Auth.auth().currentUser?.uid

    let favouriteRef = self.databaseRef.child("favourites").child(userID!)
    favouriteRef.queryOrderedByKey().observe(.childAdded, with: { (snapshot) in

        let favouriteID = "\(snapshot.value!)"
        let usersRef = self.databaseRef.child("users")

        usersRef.observe(.value, with: { (users) in

            self.usersArray.removeAll()

            for user in users.children {
                let user = UserClass(snapshot: user as! DataSnapshot)

                if favouriteID == user.uid {
                    self.usersArray.append(user)
                }
                self.tableView.reloadData()
            }
        })
    })
}

我尝试在函数中创建另一个数组,然后将主数组设为=,但是在屏幕之间切换时它不会更新表视图。此代码仅在第一次加载页面视图时有效。但是,我使用的是一个不会在屏幕上显示日期的后退按钮。

谢谢,如果您希望我提供其他任何内容,请与我联系。

已编辑的代码(新问题,见下文):

func fetchFavourites () {
    DispatchQueue.main.async( execute: {
        let userID = Auth.auth().currentUser?.uid
        var tempFav = [UserClass]()

        let favouriteRef = self.databaseRef.child("favourites").child(userID!)
        favouriteRef.queryOrderedByKey().observe(.childAdded, with: { (snapshot) in

            let favouriteID = "\(snapshot.value!)"
            let usersRef = self.databaseRef.child("users")

            tempFav.removeAll()

            usersRef.observe(.value, with: { (users) in

                self.usersArray.removeAll()
                for user in users.children {
                    let user = UserClass(snapshot: user as! DataSnapshot)

                    if favouriteID == user.uid {
                        tempFav.append(user)
                    }
                    self.usersArray = tempFav
                    self.tableView.reloadData()
                }
            })
        })
    })
}

问题已得到解决,它填充了所有喜欢的用户的tableview,如果我不喜欢它们就摆脱它们等等。但是,如果我不同于所有用户。即使数组应为空,该数组也会复制用户两次。

0 个答案:

没有答案