为什么要添加两个临时单元而不是一个?

时间:2019-06-09 04:47:32

标签: ios swift

我使用下面的代码向评论部分添加临时评论。它曾经可以正常工作,但是由于某些原因,每当我点击带有以下代码的添加注释按钮时,就会添加2个单元格。

为什么会这样,我该如何解决?

            @IBAction func AddCommentButton(_ sender: Any) {
    fetchCurrentUsersInfo() {
        self.addComment() {
            self.tableView.beginUpdates()
            let cell = self.tableView.dequeueReusableCell(withIdentifier: "commentCell", for: [self.arrayOfComments.count]) as! commentTableViewCell
            self.tableView.insertRows(at: [NSIndexPath(row: self.arrayOfComments.count-1, section: 0) as IndexPath], with: .automatic)
            self.addTemporaryComment(cell: cell)
            self.tableView.endUpdates()
            self.addCommentTextField.text = ""
        }
    }
}

更新3:

我发现每次添加注释时,都会运行baseVC内部的此方法:

@objc func CommentsTapped(_ tap: UITapGestureRecognizer) {
    //Bring up the comments view and load all data into it.
    p3CommentContainer.isHidden = false
    self.commentsVC1.commentCellDelegate!.updateP3CommentSheet(frame: self.initalFrame.offsetBy(dx: 0, dy: 900))

    self.arrayOfComments.removeAll()
    self.commentsVC1.tableView.reloadData()

    UIView.animate(withDuration: 0.2, delay: 0, usingSpringWithDamping: 0.8, initialSpringVelocity: 0.9, options: .curveEaseOut, animations: {
        self.loadComments({
            print("compelted?")
            self.commentsVC1.tableView.reloadData()
        })
    })
    self.commentsVC1.commentCellDelegate!.updateP3CommentSheet(frame: self.initalFrame.offsetBy(dx: 0, dy: 180))
    self.commentsVC1.selectedMedia = self.selectedPost?.interimMedia[self.numberMedia]
    self.commentsVC1.numberMedia = self.numberMedia
}

我不知道为什么会这样,我无法找到阻止它运行的方法...但是我认为这就是重复注释单元格的原因

更新:

我注释掉了临时注释代码,即使这样重复也发生了...

更新2:

我发现取消注释的代码并使用我的旧方法可以正常工作,而使用单个查询版本时却无法。但是,我需要此版本,因为我的后端代码需要所有数据都在其中才能创建通知。

为什么会这样,我该如何解决?

    refrence.updateChildValues(newData)
//            refrence.updateChildValues(["UID" :  Auth.auth().currentUser?.uid])
//            refrence.updateChildValues(["Comment" :  "\(newComment!)"])
//            refrence.updateChildValues(["timeStamp" : Date().timeIntervalSinceReferenceDate])

1 个答案:

答案 0 :(得分:2)

删除dequeueReusableCell行。无论如何,这都是荒谬的。

其他改进:

  • 删除begin-/endUpdates
  • 根据命名约定名称,该函数以小写字母开头(addCommentButton
  • 将索引路径创建为IndexPath,而无需桥接
  • 在数据模型中添加临时注释,并在cellForRowAt中分配

@IBAction func addCommentButton(_ sender: Any) {
    fetchCurrentUsersInfo() {
        self.addComment() {   
        self.tableView.insertRows(at: [IndexPath(row: self.arrayOfComments.count-1, section: 0)], with: .automatic)
        // self.addTemporaryComment(cell: cell)  
        self.addCommentTextField.text = ""
    }
}