【问题标题】:Calling a reloadtableview() only once while using Firebase observe function使用 Firebase 观察功能时仅调用一次 reloadtableview()
【发布时间】:2018-04-02 23:22:38
【问题描述】:

正如标题所说,我只希望 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 都会重新加载。我只想重新加载一次,但仍然有那个观察者。

【问题讨论】:

  • 既然你真的要求 reloadData 不是每次更新 posts 时都被调用,请使用 didSet 重新加载表格视图。
  • 这不是我已经在做的吗?不太确定我是否理解您的回答。
  • 糟糕。错字。我的意思是“不要使用didSet”。
  • 好的。我试图将它移动到 viewWillAppear,但是当我打开应用程序时它不会加载(它会在调用 viewWillAppear 时重新加载)。
  • 为什么不希望每次更新posts 时都重新加载表?表格视图如何显示正确的数据?

标签: ios swift firebase


【解决方案1】:

如果我理解正确,下面的代码应该可以满足您的需求。 (无法将其挤入 cmets)

var shouldReloadTableView = true

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

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

【讨论】:

  • 这对我有用,但让我遇到了另一个问题:现在 posts.reverse() 仅在第一次重新加载 tableview 时被调用。在我希望 tableView 再次重新加载的其他情况下,它不会反转帖子。知道为什么吗?
  • 这个问题应该和这个答案添加的代码无关。
猜你喜欢
  • 1970-01-01
  • 2022-01-09
  • 1970-01-01
  • 2016-11-28
  • 2015-11-05
  • 2018-08-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多