ios - 从 Firebase 单元格中删除数据

标签 ios swift firebase firebase-realtime-database

我正在构建一个聊天应用程序,作为 ios 编程的学习之旅。该应用程序使用 firebase 进行身份验证等。我正在尝试使用 _comit editstyle 方法实现删除功能。但我无法删除其中的数据firebase。当我注销并重新登录时,我能够看到旧消息。我的理解是,我必须选择与单元格索引相对应的子项。我尝试了多种组合,并将观察设置为 .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 = ""
}

最佳答案

更新您的代码并确保使用子 key :

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


}

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

关于ios - 从 Firebase 单元格中删除数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54384176/

相关文章:

ios - 最初从 firebase 获取无效的推送 token ,最后获取有效的推送 token

ios - 为什么我们的应用程序大小急剧增加而功能几乎没有变化?

ios - 文本从下到上对齐 iOS SDK

ios - ReactiveCocoa 4 : Observing an Action's completed event

ios - 设置图像 UILabel swift 的问题 - 在展开可选时发现 nil

ios - UITableView 的模糊和活力效果

ios - GCD 网络服务器(iOS)。如何请求具有相同端口的 2 条不同路径? (如 8080)

ios - Swift 中的 UITableViewCell 中的 UIScrollView

javascript - Firebase - snapshot.val() 返回 null - 为什么它无法连接到正确的集合?

Angular 6 - 嵌套 Firebase 请求