Как удалить ячейку tableView и удалить данные из firebase - PullRequest
0 голосов
/ 30 мая 2020

Застрял, пытаясь провести пальцем влево по событию, чтобы оно удалялось из TableView и удалялось из базы данных реального времени Firebase. Это то, что у меня есть до сих пор. Застрял в реализации, так что это соответствует моему рабочему проекту.

База данных Firebase

Табличное представление

    func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) {
    if editingStyle == .delete {
        let ref = Database.database().reference(fromURL: yourProjectURL)
        let eventRef = ref.child("events").child(postEvents[indexPath.row].key)
        // ^^ this only works if the value is set to the firebase uid, otherwise you need to pull that data from somewhere else.
        postEvents.removeValue()
        postEvents.remove(at: indexPath.row)
        tableView.deleteRows(at: [indexPath], with: .fade)
    }
}

что входит в ".reference (fromURL: yourProjectURL)" для меня? is It -> .child ("events")

Класс события

struct Events {

let eventId: String
let eventName: String
let city: String
let state: String
let country: String
let startDate: String
let endDate: String
let itinerary: String
let isPrivate: Bool
var members: [String]
var isJoined : Bool
let creator : String

init?(eventId: String, dict: [String: Any]) {

    //let dateFormatter = DateFormatter()
    //dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss +zzzz"

    guard let eventName = dict["eventName"] as? String,
        let city = dict["city"] as? String,
        let country = dict["country"] as? String,
        let state = dict["state"] as? String,
        let startDate = dict["startDate"] as? String,
        let endDate = dict["endDate"] as? String,
        let itinerary = dict["itinerary"] as? String,
        let creator = dict["creator"] as? String,
        let eventType = dict["eventType"] as? String

        else { return nil }

    self.eventName = eventName
    self.city = city
    self.country = country
    self.state = state
    self.startDate = startDate
    self.endDate = endDate
    self.itinerary = itinerary
    self.isPrivate = eventType == "private" ? true : false
    self.eventId = eventId
    var members = [String]()
    if let dic = dict["members"] as? [String:String] {
        for (_,value) in dic {
            members.append(value)
        }
    }
    self.isJoined =  members.contains(Auth.auth().currentUser!.uid)
    self.members = members
    self.creator = creator

}}

При postEvents.removeValue () я получаю сообщение об ошибке «Значение типа '[Events]' не имеет члена 'removeValue' ". Как мне это исправить?

1 Ответ

0 голосов
/ 30 мая 2020

Чтобы удалить узел в Firebase, сначала установите sh путь к этому узлу, создав ссылку на него, а затем removeValue для этой ссылки (или установите для ref значение nil, которое также удалит его)

Вкратце

let eventToDelete = dataSource[indexPath.row] //get the event from the dataSource
let firebaseKey = eventToDelete.eventId //assuming the eventId is the node key
let eventRef = my_firebase.child("events").child(firebaseKey)
eventRef.removeValue()  //or eventRef.setValue(nil)
...