2016-05-05 6 views
0

Dies ist mein Code in Firebase.Strukturieren von Daten unter gespeicherten Daten in Firebase

//Create a reference to a Firebase database URL 
Firebase *savedRef2 = [[Firebase alloc] initWithUrl:@"https://example.firebaseio.com/Location_Coordinates"]; 

// Write data to Firebase 

Firebase *postRef2 = [savedRef2 childByAppendingPath: @"LOCATION DATA"]; 
NSDictionary *post1 = @{ 
         @"DATE": dateString, 
         @"Lat": @(location.coordinate.latitude), 
         @"Long": @(location.coordinate.longitude), 
         @"USER": name, 
         }; 
Firebase *post1Ref = [postRef2 childByAutoId]; 
[post1Ref setValue: post1]; 

Wenn ein Benutzer klickt auf der App speichern, werden die Daten auf meine Firebase Datenbank gespeichert, aber es hält als neues Objekt direkt unter dem vorherigen gespeicherten speichern. Wie kann ich es so machen, dass es einmal speichert und der Rest, der gespeichert wird, sind Kinder dieser ersten gespeicherten Daten?

Dies ist ein Bild Current saved data for coordinates. davon, wie es spart und ich will es nicht so. Wie kann ich es so machen, dass es so aussieht 2. Ich speichere Koordinaten von Benutzern, aber es erstellt immer wieder eine neue 'childByAutoId'-Zeichenfolge und ich möchte nur, dass die gespeicherten Daten unter die 1.' childByAutoId'-Zeichenfolge fallen und nicht neue IDs erstellen, so dass die Koordinaten jedes Benutzers jedes Mal unter eine ID fallen ist gespeichert.

UPDATE: Ich habe verschiedene Benutzer, die Daten übermitteln und in denen Daten Koordinaten sind. Ich möchte, dass dieselben Benutzerdaten NUR unter EINEM Knoten mit 'childByAutoID' erstellt werden und der Rest der Daten (Koordinaten) darunter liegt. Die Art, wie es jetzt eingerichtet ist, ist, dass MULTIPLE-Knoten (childByAutoId) in Firebase protokolliert werden und es für mich schwierig macht, sie zu lesen. Deshalb möchte ich EINEN Knoten (childByAutoId) zuerst erstellen und den Rest darunter fallen lassen Mal, wenn jemand auf Speichern klickt. So habe ich es zur Zeit. Current Und so will ich es Want

+0

ChildByAutoId einen neuen Knoten erzeugt Name. Daher wird der Code jedes Mal, wenn [post1 setValue: post1] aufgerufen wird, separate untergeordnete Knoten unter LOCATION DATA erstellen. Es scheint, dass die beiden Bilder, die Sie verlinkt haben, tatsächlich gleich sind - wenn Sie im aktuellen Bild auf das Minuszeichen neben jedem Knotennamen klicken, wird es wie in Bild 2 aussehen. Also ... scheint der Code zu funktionieren - kann Sie klären das Problem? – Jay

+0

Ich will nur 1 neuen Knoten erstellt werden und dann den Rest der Daten unter diesen Knoten fallen. Wie kann ich es so machen, dass nur 1 Knoten erstellt wird und der Rest von ihnen als Kindknoten an diesen spezifischen neuen Knoten fällt? @Jay –

+0

@CarlosAlan In der Frage, die Sie geschrieben haben, dass Sie wollen, dass neu erstellte Knoten Kinder des ersten erstellt werden - ist es wirklich, was Sie erreichen möchten? Außerdem sehen beide Strukturen für mich gleich aus, und der Code, den Sie zur Verfügung gestellt haben, erzeugt genau die Struktur aus Bild 2 – pkacprzak

Antwort

1

Super einfach!

Wenn ein Benutzer die Authentifizierung authentifiziert, wird die Firebase-Variable mit ihrer Benutzer-ID ausgefüllt.

Im Allgemeinen, wenn Sie Informationen über Benutzer speichern, würden Sie diese Daten speichern oder diese Daten mit ihrer UID verknüpfen.

Also, wenn Sie für jeden Benutzer, Daten speichern möchten, speichern Sie es in einem Knoten, wo die Eltern ihre uid

Location_Coordinates 
LOCATION DATA 
    uid_0 
    childByAutoId 
    childByAutoId 
    uid_1 
    childByAutoId 
    childByAutoId 

dann den Verweis erstellen

Firebase *rootRef = [[Firebase alloc] initWithUrl:@"https://example.firebaseio.com]; 
Firebase *locCoordsRef = [rootRef childByAppendingPath("Location_Coordinates"); 
Firebase *locDataRef = [locCoordsRef childByAppendingPath("LOCATION DATA"]; 

NSString *uid = rootRef.authData.uid 

Firebase *thisUserRef = [locDataRef childByAppendingPath(uid)]; 

NSDictionary *userDataDict = @{ 
         @"DATE": dateString, 
         @"Lat": @(location.coordinate.latitude), 
         @"Long": @(location.coordinate.longitude), 
         @"USER": name, 
         }; 
Firebase *dataRef = [thisUserRef childByAutoId]; 
[dataRef setValue: userDataDict]; 
+0

Du bist der Mann!Danke Jay. –