我正在构建一个聊天应用程序作为ios编程的学习过程。该应用程序正在使用Firebase进行身份验证等。我正在尝试使用_comit editstylestyle方法实现delete功能,但是我无法从中删除数据当我注销并重新登录时,能够看到旧消息。我的理解是,我必须选择与单元格索引相对应的子代。我尝试了将观察值设置为.childremoved,.value的多种组合,但是没有任何效果。任何帮助和解释,我将不胜感激。
var ref: DatabaseReference!
var messageArray : [Message] = [Message]()
var postkey = ""
@IBOutlet var heightConstraint: NSLayoutConstraint!
@IBOutlet var sendButton: UIButton!
@IBOutlet var messageTextfield: UITextField!
@IBOutlet var messageTableView: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
// declare delegate
messageTableView.delegate = self
messageTableView.dataSource = self
messageTableView.register(UINib(nibName: "MessageCell", bundle: nil), forCellReuseIdentifier: "customMessageCell")
messageTextfield.delegate = self
ref = Database.database().reference()
let tapGesture = UITapGestureRecognizer(target: self, action: #selector(TableViewTapped))
view.addGestureRecognizer(tapGesture)
retrieveMessages()
}
// TableViewTapped method
@objc func TableViewTapped () {
view.endEditing(true)
}
// TODO: Data source method
func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {
if editingStyle == .delete {
let groupeRef = ref.child("message").child((messageArray[indexPath.row].messageBody))
groupeRef.removeValue()
messageArray.remove(at: indexPath.row)
print(indexPath.row)
messageTableView.deleteRows(at: [indexPath], with: .fade)
}
messageTableView.reloadData()
}
消息类别
class Message {
//TODO: Messages need a messageBody and a sender variable
var messageBody = ""
var sender = ""
}
答案 0 :(得分:0)
更新您的代码,并确保使用子键:
func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {
if editingStyle == .delete {
self.ref.child("message").child((messageArray[indexPath.row].messageBody)).removeValue { error, _ in
print(error)
}
messageArray.remove(at: indexPath.row)
print(indexPath.row)
messageTableView.deleteRows(at: [indexPath], with: .fade)
}
messageTableView.reloadData()
}
在控制台中检查数据库以获取更新的值。