Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/108.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 为什么要添加两个临时单元格而不是一个?_Ios_Swift - Fatal编程技术网

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

Ios 为什么要添加两个临时单元格而不是一个?,ios,swift,Ios,Swift,我使用下面的代码将临时注释添加到注释部分。它过去工作得很好,但由于某种原因,现在每当我点击带有下面代码的addcomment按钮时,就会添加2个单元格 为什么会发生这种情况?我如何解决它? @IBAction func AddCommentButton(_ sender: Any) { fetchCurrentUsersInfo() { self.addComment() { self.tableView.beginUpda

我使用下面的代码将临时注释添加到注释部分。它过去工作得很好,但由于某种原因,现在每当我点击带有下面代码的addcomment按钮时,就会添加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])

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

其他改进:

  • 删除
    begin-/endUpdates
  • 根据命名约定,以小写字母(
    addCommentButton
    )开头命名函数
  • 将索引路径创建为
    indepath
    ,而不使用桥强制转换
  • 在数据模型中添加临时注释,并将其分配到
    cellForRowAt


我尝试了这个方法,但没有解决问题,但我确实发现了我的问题的一些特殊之处,请参见更新2。然后该单元格被复制到其他地方。此代码仅插入一个单元格
@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 = ""
    }
}