嗨,我正在做一个帖子屏幕,用户可以在其中添加帖子并进行查看。这是用于查看的视图控制器。我正在从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
}
答案 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()
}