Я использую приведенный ниже код, чтобы добавить временный комментарий в раздел комментариев. Раньше он работал нормально, но по какой-то причине теперь, когда я нажимаю кнопку добавления комментария с кодом ниже, добавляются 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 = ""
}
}
}
Я обнаружил, что этот метод, который находится внутри 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
}
Я не знаю, почему это так, и я не могу найти способ предотвратить его запуск... Но я думаю, что это то, что является причиной дублирования ячеек комментариев.
Я закомментировал код временного комментария, и даже тогда происходит дублирование...
Я обнаружил, что когда закомментированный код раскомментирован и используется, мой старый метод работает правильно, при использовании версии с одним запросом, которую я сделал, это не так. Однако мне нужна эта версия, потому что моему внутреннему коду нужны все данные, чтобы создать уведомление.
Почему это происходит и как я могу это исправить?
refrence.updateChildValues(newData)
// refrence.updateChildValues(["UID" : Auth.auth().currentUser?.uid])
// refrence.updateChildValues(["Comment" : "\(newComment!)"])
// refrence.updateChildValues(["timeStamp" : Date().timeIntervalSinceReferenceDate])





Удалите строку dequeueReusableCell. Все равно это неразумно.
Другие улучшения:
begin-/endUpdatesaddCommentButton).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 = ""
}
}
Затем ячейка дублируется в другом месте. Этот код вставляет только одну ячейку
Я попробовал это, и это не решило проблему, но я нашел кое-что необычное в своей проблеме, см. Обновление 2.