我有一个功能可以观察我的Firebase数据库中的数据。此数据将插入到数组中,因此可以将其发送到我的tableviewcell Viewcontroller。所有数据都将正确放置在tabelviewcell中,但是更新Firebase数据库时出现问题。每次更改数据库中的值时,即使未调用我的函数,它也会立即更新tableView。我不确定自己在做什么错以及如何防止这种情况。
这是我的功能观察:
Database.database().reference().child("posts").child("\(postId)").child("comments").observe(.value, with: { snapshot in
if let snapshots = snapshot.children.allObjects as? [DataSnapshot] {
for snap in snapshots {
if let postDict = snap.value as? Dictionary<String, AnyObject> {
let key = snap.key
let post = Comment.transformComment(dict: postDict)
self.comments.insert(post, at: 0)
self.tableView.reloadData()
}
}
}
})
数组:
var comments: [Comment] = []
extension Comment {
static func transformComment(dict: [String: Any]) -> Comment {
let comment = Comment()
comment.commentText = dict["commentText"] as? String
comment.uid = dict["uid"] as? String
comment.timestamp = dict["timestamp"] as? Int
comment.likeCount = dict["likeCount"] as? Int
comment.childByAutoId = dict["childByAutoId"] as? String
comment.id = dict["postId"] as? String
return comment
}
}
Tablevieww函数:
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
if comments.count == 0 {
self.tableView.setEmptyMessage("No comments yet!")
} else {
self.tableView.restore()
}
return comments.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Comment", for: indexPath) as! CommentTableViewCell
let comment = comments[indexPath.row]
cell.comment = comment
cell.delegate = self
return cell
}
答案 0 :(得分:1)
一次收听即可替换
.child("comments").observe(.value, with: { snapshot in
使用
.child("comments").observeSingleEvent(of: .value) { snapshot in
或
.child("comments").observe(.childChanged) { snapshot in
听添加的孩子