即使未调用该功能,Firebase也会观察新添加的数据

时间:2019-05-26 22:21:19

标签: swift uitableview firebase-realtime-database

我有一个功能可以观察我的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
    }

1 个答案:

答案 0 :(得分:1)

一次收听即可替换

.child("comments").observe(.value, with: { snapshot in

使用

.child("comments").observeSingleEvent(of: .value) { snapshot in

.child("comments").observe(.childChanged) { snapshot  in

听添加的孩子