2015-05-13 22 views
6

Ho un'istanza di Firebase in cui voglio memorizzare un dizionario di valori che voglio memorizzare in firebase. Ho esaminato la documentazione https://www.firebase.com/docs/ios/guide/saving-data.html come riferimento ma non riesco a farlo funzionare. Quanto segue è il mio tentativo:Memorizzazione di dizionari in Firebase?

//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 
     ]) 

Ma io continuo a ricevere un errore che dice: Could not find an overload for '+' that accepts the supplied arguments quando provo a fare eventRefChild.setValue([... e non sono onestamente troppo sicuro perché sto ottenendo questo problema. Qualsiasi aiuto sarebbe apprezzato!

EDIT: La variabile EventReference è assegnato come così: EventReference = Firebase(url:"<Insert Firebase URL>")

E dentro currentUserFirstName e currentUserLastName sono nome e cognome di un individuo afferrato da Facebook quindi sarebbe simile rispettivamente BobSmith.

+1

Fare in modo che name = currentUserFirstName + "" + currentUserLastName. quindi usa il nome costante. – Amit89

+0

Non sono sicuro del motivo per cui hai chiuso la tua domanda precedente sullo stesso identico problema, ma il mio commento rimane lo stesso: l'unico operatore '+' in questo codice è dove stai concatenando 'currentUserFirstName +" "+ currentUserLastName'. Se passi attraverso il codice, quella riga viene eseguita correttamente? –

+0

Potete fornire più codice? Sarà utile vedere i valori di currentUserFirst e currentUserLast. Firebase accetterà un dizionario per setValue quindi non ci dovrebbe essere un problema lì. Inoltre non sono sicuro di cosa sia EventReference. Se potessi fornire ulteriori informazioni su questo, sarebbe utile. –

risposta

7

Non c'è niente di sbagliato nel codice. Il problema è i valori che sono in corso di caricamento in

var currentUserFirstName: String! 
var currentUserLastName: String! 

Come prova, ho creato un progetto di esempio con il seguente codice, che è un duplicato del vostro codice Ripubblicato ma con le stringhe normali caricati nel var di:

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 
     ]) 

il progetto è stato compilato ed eseguito correttamente e i dati previsti vengono scritti in Firebase. Si noti che eventName.text è stato sostituito con una stringa, ma ciò non influisce sulla risposta.

L'indagine deve passare a ciò che viene caricato nelle var, e la risposta è che uno di quei var, currentUserFirstName o currentUserLastName viene caricato con un OBJECT (classe), non con una stringa.

Come nota a margine, perché sono di dichiarato il var optional come implicitamente da scartare (la!)

edit: l'aggiunta di informazioni aggiuntive a che fare con gli optionals

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

Per evitare che il codice da errori quando un facoltativo non contiene alcun valore, aggiungi il codice sopra direttamente sopra la linea di concatenazione del codice. Quello che succede qui è che stiamo assegnando la stringa in currentUserFirstName (opzionale var) a una stringa effettiva (una variabile standard, non opzionale).

Se l'espressione restituisce true, è possibile procedere alla valutazione di currentUserFirstName.

Se è falso, currentUserFirstName non contiene una stringa in modo da gestire l'errore elegantemente.

+0

Sto usando le variabili dichiarate come optionali non imballati perché sto usando i valori e li passiamo tra segues. Proverò a giocare con questo e ti faccio sapere. Aggiornamento – user1871869

+0

: quello che ho provato è stato dichiarare le variabili in questo modo: 'var currentUserFirstName: String',' var currentUserLastName: String', 'var currentUserObjectID: String' ma ottengo un errore che dice' '_' non convertibile in 'StringLiteralConvertible' ' – user1871869

+0

Sembra che tu abbia ragione. La dichiarazione della variabile come tipo 'String' sta influenzando la mia capacità di memorizzare valori in Firebase. Comunque intorno a questo? Voglio comunque passare questi valori tra i segui e archiviarli nel mio riferimento Firebase. – user1871869