2017-03-02 3 views
0

Was ist der beste Weg, um eine Anzahl zu Ihren Chatnachrichten hinzuzufügen, um sie in die googles firebase Datenbank hochzuladen? Die Art, wie ich es habe, wird neu initialisiert, so dass es die Daten vermasselt.Firebase Database Count

FRAGE: Was ist der beste Weg, um Nachrichten laden Chat, so dass sie nicht miteinander interferieren? über Firebase.

+ general_room 1,2,3,4

Zahlen, die jede Messaga gesendet.

import Foundation 
import Firebase 
import FirebaseDatabase 
import FirebaseStorage 

var count = 0 

func UploadGeneralChatRoom(message : String) { 

    //Firebase Initialization 
    var ref: FIRDatabaseReference! 
    //var storage: FIRStorageReference! 
    let userID = FIRAuth.auth()?.currentUser?.uid 
    ref = FIRDatabase.database().reference() 
    //storage = FIRStorage.storage().reference() 


    //Get Data from database resend to database 
    ref.child("Users").child(userID!).observeSingleEvent(of: .value, with: {(snapshot) in 

     let snapDict = snapshot.value as? NSDictionary 
     let username = snapDict?["Username"] as? String ?? "" 
     let firebaseUserPhotoURL = snapDict?["photo_url"] as? String ?? "" 

     count = count + 1 
     print("Count: ", count) 


     let countString = String(count) 

     print("CountStrig: " + countString) 


     ref.child("general_room").child(countString).setValue(["Username": username, "uid": userID!, "Message" : message, "photo_url" : firebaseUserPhotoURL]) 


    }) 

} 
+0

Ich bin eine wirklich schwierige Zeit mit der Frage zu verstehen. Sie fragen nach dem Hinzufügen einer Zählung, fragen dann aber auch nach Chatnachrichten, die sich gegenseitig stören? Außerdem ist der Code fraglich, da er count auf 0 initialisiert und dann einige Daten in die Datenbank liest und schreibt. Wäre es nicht sinnvoller, die Anzahl der Child Nodes von Firebase zu lesen, anstatt jedes Mal bei 0 zu beginnen? Bitte klären und aktualisieren Sie die Frage und wir werden versuchen zu antworten. – Jay

+0

mein Problem ist eine neue Zählung jeder Nachricht. Was ich mache, funktioniert nicht, weil ich jedes Mal auf Null neu initialisiere. Ich weiß nicht, wie ich meinen Firebase-Upload so ändern kann, dass es die Zählung nie wiederholt und so, dass ich Nachrichtenfluss habe. – nil

+0

Wie würde ich den Knoten jedes Mal zählen? – nil

Antwort

0

Die ursprüngliche Frage ist ziemlich unklar, aber wenn Sie eine Nachricht an einen Chat-Raum hochladen möchten, ist hier eine Struktur:

users 
    uid_0 
    name: "Kirk" 
    uid_1 
    name: "Spock" 
    uid_2 
    name: "McCoy" 

chat_rooms 
    room_0 
    name: "Bridge Chat Room" 
    messages: 
    message_0: 
     msg: "This is a message posted by Spock" 
     uid: "uid_1" 
    message_1: 
     msg: "Message posted by Kirk" 
     uid: "uid_0" 

und einige Code, um eine neue Nachricht in chat_rooms zu erstellen, room_0 (diese stark verdichtet werden könnte, aber verlassen ausführliche zur besseren Lesbarkeit)

let ref = rootRef.child("chat_rooms") 
let roomRef = ref.child("room_0") 
let messagesRef = roomRef.child("messages") 
let msgRef = messagesRef.childByAutoId() 
let data = ["msg": "a message posted by McCoy", 
      "uid": "uid_2"] 
msgRef.setValue(data) 

in

führen
chat_rooms 
    room_0 
    name: "Bridge Chat Room" 
    messages: 
    message_0: 
     msg: "This is a message posted by Spock" 
     uid: "uid_1" 
    message_1: 
     msg: "Message posted by Kirk" 
     uid: "uid_0" 
    message_2: 
     msg: "a message posted by McCoy" 
     uid: "uid_2" 

message_0, message_1 usw. sind Schlüssel, die mit childByAutoId erstellt wurden.

Wenn Sie wissen möchten, wie viele Nachrichten gibt, ist hier eine Option

messagesRef.observeSingleEvent(of: .value, with: { snapshot in 
    print(snapshot.childrenCount) 
}) 

und das Ergebnis

3 
Verwandte Themen