使用Firebase观察功能时,只调用一次reloadtableview()一次

时间:2018-04-02 23:22:39

标签: ios swift firebase

正如标题所说,我只希望reloadtableview()被调用一次。我该如何处理? 这是我的代码:

var posts = [Post]() {
        didSet {
            posts.reverse()
            self.tableView.reloadData()
        }
    }




func fetchData(){

            currentQuery.observe(.value, with: { (snapshot) in
                if let snapshot = snapshot.children.allObjects as? [DataSnapshot]{
                    var foundPosts = [Post]()
                    for snap in snapshot {
                        if let postDict = snap.value as? Dictionary<String, Any>{
                            let key = snap.key
                            let post = Post.init(postKey: key, postData: postDict)
                            foundPosts.append(post)
                        }
                    }

                    self.posts = foundPosts
                    geoQuery?.removeAllObservers()
                }

        })
    }

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)


    fetchData()
    // if I put "tableView.reloadData()" here, it wont load when the app opens for the first time
}

这样,每次在数据库中更改某些内容时,tableview都会重新加载。我想只重新加载一次,但仍然有那个观察者。

1 个答案:

答案 0 :(得分:0)

如果我理解你的话,下面的代码应该做你想要的。 (无法将其挤入评论中)

var shouldReloadTableView = true

var posts = [Post]() {
    didSet {
        posts.reverse()

        guard shouldReloadTableView else { return }
        shouldReloadTableView = false
        self.tableView.reloadData()
    }
}