Im Grunde habe ich Schwierigkeiten, den Wert von Firebase in einer Tabellenansicht zu ändern. Ich versuche gerade, eine Facebook-Post-Like-Funktion zu erstellen, die es Nutzern ermöglicht, Ihren Post zu mögen. Ich bin mir jedoch nicht ganz sicher, wie ich damit weitermachen würde. Ich möchte dem Benutzer die Möglichkeit geben, jeden Post zu mögen, und dann die vorherigen Likes + das, was gegeben wurde, zu speichern und in Firebase zu aktualisieren. Im Moment habe ich nur den Code, um jeden Beitrag anzuzeigen, und auch die @IBAction von der Schaltfläche (Like-Schaltfläche).Swift/Firebase Änderungswert von der Tabellenansicht
Ich bin mir nicht sicher, wie ich es schaffen würde, auf jeden spezifischen Beitrag nur über die Tabellenansicht zuzugreifen, mit indexPath.row (?). Hier ist der Code, den ich bisher habe:
Beitrag bearbeiten:
Also im Grunde habe ich eine Tableview, eine Tabellenansicht Zelle enthält, zeigt die Menge an Leuten jeder Beitrag hat. Um dies zu tun, habe ich diesen Code in meinem viewDidLoad(), um nur die Daten von Firebase zu holen:
ref.childByAppendingPath("posts").queryOrderedByChild("timeRegistered").observeEventType(FEventType.ChildAdded) { (snapshot:FDataSnapshot!) in
var dict = [String:String]()
dict["keys"] = snapshot.key as? String
dict["votes"] = snapshot.value["likes"] as? String
self.posts.append(dict)
self.tableView.reloadData()
}
nur zu erwähnen, dieser Code funktioniert, indem Sie mit diesem Code in der cellForRowAtIndexPath: cell.textLabel!.text = String(posts[indexPath.row]["names"]!)
ich dachte aber, dass der Code, den ich in viewDidLoad verwendet (.ChildAdded Funktion) würde auch mit ChildChanged arbeiten, so ist es das, was ich kam mit:
ref.childByAppendingPath("posts").queryOrderedByChild("timeRegistered").observeEventType(FEventType.ChildChanged) { (snapshot:FDataSnapshot!) in
var dict = [String:String]()
dict["keys"] = snapshot.key as? String
dict["votes"] = snapshot.value["votes"] as? String
self.posts.append(dict)
self.tableView.reloadData()
}
Leider sieht es aus wie das Tableview nur die zeigt neuer Wert (der Wert wurde von einem geändert IBAction, ich stelle auch diesen Code zur Verfügung.) - während der alte Wert einfach dort bleibt. Dies ist der Code zum Ändern Wert:
var key = posts[1]["keys"]
ref.childByAppendingPath("posts").childByAppendingPath(key!).updateChildValues(["name":"Test name"])
tableView.reloadData()
Immer noch versuchen, einen besseren Weg, den genauen Wert zu ändern, durch Index, um herauszufinden - aber das ist nicht der Fall jetzt (also Beiträge [1] [ „Schlüssel“]). Scheinen Sie zu verstehen, was das Problem ist?
Zusammenfassend: Ich möchte auf eine Schaltfläche in einer Tabellenansicht Zelle klicken, und fügen Sie ein ähnliches zu dem bestimmten Beitrag, und aktualisieren Sie die Gesamtzahl in Echtzeit.
Es ist ein wenig unklar, was Sie zu tun versuchen; und auch, was ist die Schnittstelle? Sind "Stimmen" und "Gefällt mir" dasselbe? Eine einfache Lösung wäre eine kleine + Schaltfläche in jeder Zeile und wenn der Benutzer auf das + klickt, werden die Bewertungen/Likes erhöht. Sie wissen, welche Zeile über clickedRow angezeigt wird, oder haben eine benutzerdefinierte Zelle, die den Klick verarbeitet. – Jay
Also im Grunde möchte ich die 'Likes'-Funktion hinzufügen, wie Sie es nennen können - und ich möchte, dass es die Datensätze sofort aktualisiert, nachdem' Like 'gedrückt wurde (alte Likes + 1 neue Like). – askaale
Ich denke schon ... Mach es nicht kompliziert. Haben Sie einfach eine IBAction, die auf das Klicken auf eine + Schaltfläche reagiert. Ermitteln Sie, auf welche Zeile geklickt wurde, rufen Sie dann die aktuellen Likes aus Ihrem Array von Posts [clickedRow] ab, inkrementieren Likes und aktualisieren dann den Wert in Firebase über den Firebase-Schlüssel für diese Zeile und den untergeordneten Knoten likes.setValue (votes). – Jay