如何自动重新加载tableview

时间:2019-01-28 02:48:23

标签: ios swift uitableview

嗨,我正在做一个帖子屏幕,用户可以在其中添加帖子并进行查看。这是用于查看的视图控制器。我正在从Firebase获取信息,并将该信息重新加载到我的表视图单元中,一切都变得很完美。但是,要重新加载屏幕并查看我的帖子是否是最新的,尽管我使用.reloadData()函数,并且每次发布后都不会自动重新加载,但我每次都需要关闭应用程序并再次运行它。这是我的代码,我该在哪里出错?还是我错过了什么?

override func viewDidLoad() {
    super.viewDidLoad()
    self.navcik.title = "Posts"
    tableView = UITableView(frame:view.bounds, style: .plain)
    view.addSubview(tableView)
    let cellnib = UINib(nibName: "postTableCell", bundle: nil)
    tableView.register(cellnib, forCellReuseIdentifier: "postCell")

    tableView.delegate = self
    tableView.dataSource = self
    tableView.reloadData()
    observeposts()
}
func observeposts() {
    let db = Firestore.firestore()
    db.collection("posts").getDocuments { (snap, error) in
        var tempposts = [Post]()
        if error != nil {
            print("error:\(String(describing: error))")
        } else {
            for document in snap!.documents {
                if let dict = document.data() as? [String: Any] ,
                let username = dict["username"] as? String,
                let title = dict["title"] as? String,
                    let desc = dict["desc"] as? String {
                    let post = Post(id: "1", username: username, title: title, desc: desc)
                    tempposts.append(post)
                }

            }
            self.posts = tempposts
            self.tableView.reloadData()
        }

    }
}
@IBOutlet weak var navcik: UINavigationItem!

func numberOfSections(in tableView: UITableView) -> Int {
    return 1
}

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return posts.count
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "postCell", for: indexPath) as! postTableCell
    cell.set(post: posts[indexPath.row])
    return cell
}

2 个答案:

答案 0 :(得分:1)

好吧,我刚刚添加了一个复习课程,并观察了那里的帖子并重新加载,现在效果很好。

答案 1 :(得分:0)

尝试

 for document in snap!.documents {
            if let dict = document.data() as? [String: Any] ,
            let username = dict["username"] as? String,
            let title = dict["title"] as? String,
                let desc = dict["desc"] as? String {
                let post = Post(id: "1", username: username, title: title, desc: desc)
                tempposts.append(post)
            }
            tableView.reloadData()
        }