2015-05-13 13 views
6

Ich habe eine Firebase-Instanz, wo ich ein Wörterbuch von Werten speichern möchte, die ich in Firebase speichern möchte. Ich habe die Dokumentation https://www.firebase.com/docs/ios/guide/saving-data.html als Referenz angeschaut, aber ich kann nicht scheinen, dass es funktioniert. Im Folgenden ist mein Versuch:Wörterbücher in Firebase speichern?

//Declared above are the currentUser values as so: 
    var currentUserFirstName: String! 
    var currentUserLastName: String! 
    var currentUserObjectID: String! 

    var attendeesArray = ["objectID": currentUserObjectID, "name": currentUserFirstName + " " + currentUserLastName] 
    var eventRefChild = EventReference.childByAutoId() 
    eventRefChild.setValue([ 
     "eventName":eventName.text, 
     "attendees": attendeesArray, 
     "eventCreator": currentUserFirstName 
     ]) 

Aber ich halte einen Fehler immer sagen: Could not find an overload for '+' that accepts the supplied arguments wenn ich versuche, eventRefChild.setValue([... zu tun und ich bin ehrlich gesagt nicht sicher, warum ich dieses Problem immer bin. Jede Hilfe wäre willkommen!

EDIT: Die Variable EventReference als so zugeordnet: EventReference = Firebase(url:"<Insert Firebase URL>")

Und innen currentUserFirstName und currentUserLastName sind eines Individuums Vor- und Nachnamen von Facebook packte so würde es so etwas wie Bob aussehen Smith sind.

+1

Geben Sie name = currentUserFirstName + "" + currentUserLastName ein. Verwenden Sie dann die Namenskonstante. – Amit89

+0

Ich bin nicht sicher, warum Sie Ihre vorherige Frage zu genau demselben Problem geschlossen haben, aber mein Kommentar bleibt derselbe: Der einzige '+' Operator in diesem Code ist, wo Sie 'currentUserFirstName +" "+ currentUserLastName' verketten. Wenn Sie den Code durchgehen, wird diese Zeile korrekt ausgeführt? –

+0

Können Sie mehr Code bereitstellen? Es wird nützlich sein, die Werte von currentUserFirst und currentUserLast zu sehen. Firebase akzeptiert ein Wörterbuch für setValue, damit es dort kein Problem geben sollte. Ich bin mir auch nicht sicher, was EventReference ist. Wenn Sie mehr Informationen dazu liefern könnten, wäre es hilfreich. –

Antwort

7

Es ist nichts falsch mit Ihrem Code. Das Problem ist, die Werte, die als Test in

var currentUserFirstName: String! 
var currentUserLastName: String! 

geladen werden, habe ich ein Beispielprojekt mit dem folgenden Code, der ein Duplikat Ihres geposteten Code ist aber mit normalen Strings in den var des geladen:

var myRootRef = Firebase(url:"https://myproject.firebaseIO.com/") 

    var currentUserFirstName = "Test" 
    var currentUserLastName = "User" 
    var currentUserObjectID = "object ID" 

    var attendeesArray = ["objectID": currentUserObjectID, "name": currentUserFirstName + " " + currentUserLastName] 
    var eventRefChild = myRootRef.childByAutoId() 
    eventRefChild.setValue([ 
     "eventName": "eventName", 
     "attendees": attendeesArray 
     ]) 

Das Projekt kompiliert und läuft ordnungsgemäß und die erwarteten Daten werden in Firebase geschrieben. Beachten Sie, dass der EventName.text auch durch eine Zeichenfolge ersetzt wurde, aber das hat keinen Einfluss auf die Antwort.

Die Untersuchung muss sich auf das beziehen, was in den Variablen geladen ist, und die Antwort ist, dass einer dieser Variablen, currentUserFirstName oder currentUserLastName, mit einem OBJECT (Klasse) geladen wird, keine Zeichenfolge.

Als Randbemerkung, warum die var die als implizit ungeöffneten optionals deklariert sind (die!)

bearbeiten: Zusätzliche Informationen Zugabe mit den Extras zu tun

if let actualString = currentUserFirstName { 
    println(actualString) //proceed working with the the optional string 
} 
else { 
    return // something bad happened! currentUserFirstName does not contain a string 
} 

Um Code von Fehler zu vermeiden, wenn ein Optional enthält keinen Wert. Fügen Sie den obigen Code direkt über der Verkettungszeile des Codes hinzu. Was passiert, ist, dass wir die Zeichenfolge in currentUserFirstName (optional var) einer tatsächlichen Zeichenfolge (einer standardmäßigen, nicht optionalen var) zuweisen.

Wenn der Ausdruck als wahr ausgewertet wird, können wir fortfahren, currentUserFirstName auszuwerten.

Wenn es falsch ist, enthält currentUserFirstName keine Zeichenfolge, also behandeln Sie den Fehler elegant.

+0

Ich verwende die Variablen, die als unverpackte Optionals deklariert sind, da ich die Werte verwende und sie zwischen den Segmenten übergebe. Ich werde versuchen, damit herumzuspielen und dich wissen zu lassen. – user1871869

+0

Update: was ich versucht habe, war, die Variablen wie folgt zu deklarieren: 'var currentUserFirstName: String',' var currentUserLastName: String', 'var currentUserObjectID: String' aber ich bekomme eine Fehlermeldung' _ _ nicht konvertierbar in 'StringLiteralConvertible' ' – user1871869

+0

Es scheint, als ob du Recht hast. Die Deklaration der Variablen als Typ "String" hat Auswirkungen auf meine Fähigkeit, Werte in Firebase zu speichern. Wie auch immer darum herum? Ich möchte diese Werte immer noch zwischen den Segmenten weitergeben und sie in meiner Firebase-Referenz speichern. – user1871869