2016-04-08 43 views
0

In Firebase Objekt wir ein neues Objekt wie so erstellen:Zugriff auf ein uid Firebase

Firebase *postRef = [ref childByAppendingPath: @"posts"]; 
NSDictionary *post1 = @{ 
    @"author": @"gracehop", 
    @"title": @"Announcing COBOL, a New Programming Language" 
}; 
Firebase *post1Ref = [postRef childByAutoId]; 
[post1Ref setValue: post1]; 

Und diese neue Post könnte wie bei einer URL gespeichert werden: http://app.firebaseIO.com/posts/$postuid

Später, wenn ein Benutzer in einige UIViewController einen Beitrag anzeigen, möchten wir vielleicht einen Kommentar schreiben. Um einen Kommentar zu veröffentlichen, benötigen wir jedoch Zugriff auf die UID des Beitrags. Es scheint, dass der einzige Weg dies möglich wäre, wenn wir die UID in unserem Post-Objekt speichern würden?

Grundsätzlich ist es im Allgemeinen die beste Methode, die UID eines Objekts darin zu speichern?

+1

Im Allgemeinen verweist die uid in Firebase auf die Benutzer-UID, wie sie von authData.uid erhalten wird. In diesem Fall fragen Sie, ob Sie eine Benutzer-UID (vielleicht die UID des Benutzers, der sie gepostet hat) als Kind von post1Ref speichern soll. – Jay

+0

@Jay Ich beziehe mich auf 'uid' allgemeiner als eindeutige Kennung. – Apollo

+0

Nicht :-) Es wird wirklich Verwirrung stiften, es sei denn, Sie beziehen sich speziell auf die authData.uid, die über Firebase-Authentifizierungsmethoden zugewiesen wurde. Der eindeutige Identifizierer würde der Elternknoten oder möglicherweise der Schlüssel genannt werden. Die Antwort in diesem Fall ist nein, Sie müssen auch nicht die eindeutige Kennung (Schlüssel) im Knoten speichern, wie sie immer aus dem snapshot.key abgerufen werden kann. Natürlich ist der Wert auch snapshot.value. Es kann einen speziellen Fall geben, in dem es möglicherweise innerhalb des Knotens, aber nicht allgemein gespeichert werden muss. – Jay

Antwort

2

Die Antwort in diesem Fall ist nein, Sie müssen auch nicht die eindeutige Kennung (Schlüssel) im Knoten speichern, wie sie immer aus snapshot.key erhalten werden kann.

Der Wert des Schlüssel: Wert-Paars wird aus snapshot.value ermittelt.

Es kann einen speziellen Fall geben, in dem der Schlüssel im Knoten gespeichert werden muss, aber nicht generell.

Beispiel wird jeder Schlüssel und Wert von einem Knoten Benutzer drucken

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

und dem Code

let ref = Firebase(url:"https://your-app.firebaseio.com/users") 
ref.queryOrderedByChild("name").observeEventType(.ChildAdded, withBlock: { snapshot in 
    print("The key: \(snapshot.key)") //the key 
    print("The Value: \(snapshot.value)") //all the values for this key 
    let specificValue = snapshot.value["name"] as! NSString 
    print("Specific value: \(specificValue)") //a specific value 
}) 

anzumerken, dass in diesem Fall jeder Knoten einen Benutzer uid_x hat, wie es Schlüssel des. Dieser eindeutige Bezeichner wird von authData.uid erhalten. wenn der Benutzer erstellt wird. Traditionell würden Knotentasten in anderen Knoten von childByAutoId (oder push() für nicht iOS)

Und zu Ihrer Frage erstellt werden; Abhängig von der Verwendung ist es oft praktisch, Firebase-Snapshot-Daten in einem Wörterbuch zu speichern und diese Wörterbücher (oder Klassen) in einem Array als tableView-dataSource zu speichern. Das Array behält die Reihenfolge bei.

+0

danke für die ausführliche Antwort. – Apollo

Verwandte Themen