从Firebase单元中删除数据

时间:2019-01-27 00:47:07

标签: ios swift firebase firebase-realtime-database

我正在构建一个聊天应用程序作为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 = ""
}

1 个答案:

答案 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()


}

在控制台中检查数据库以获取更新的值。