Удалить данные из ячейки Firebase - PullRequest
0 голосов
/ 27 января 2019

Я создаю приложение чата для обучения программированию на 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 = ""
}

1 Ответ

0 голосов
/ 27 января 2019

Обновите свой код и убедитесь, что с дочерним ключом:

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


}

Проверьте вашу базу данных в консоли на наличие обновленного значения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...