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