2015-05-13 14 views
6

Mam instancję Firebase, w której chcę przechowywać słownik wartości, które chcę przechowywać w bazie firebase. Zapoznałem się z dokumentacją https://www.firebase.com/docs/ios/guide/saving-data.html jako odniesieniem, ale nie mogę sprawić, by działała. Poniżej zamieszczona jest moja próba:Przechowywanie słowników w 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 
     ]) 

ale wciąż otrzymuję błąd mówiąc: Could not find an overload for '+' that accepts the supplied arguments gdy próbuję zrobić eventRefChild.setValue([... i szczerze mówiąc nie jestem zbyt pewny dlaczego ja dostaję ten problem. Każda pomoc będzie doceniona!

EDIT: Zmienna EventReference jest przypisany jako tak: EventReference = Firebase(url:"<Insert Firebase URL>")

A wewnątrz currentUserFirstName i currentUserLastName są imię i nazwisko danej osoby chwycił od Facebook tak to będzie wyglądać mniej więcej tak BobSmith odpowiednio.

+1

Zrób to, niech nazwa = currentUserFirstName + "" + currentUserLastName. następnie użyj stałej nazwy. – Amit89

+0

Nie jestem pewien, dlaczego zamknąłeś swoje poprzednie pytanie dotyczące dokładnie tego samego problemu, ale mój komentarz pozostaje ten sam: jedynym operatorem '+' w tym kodzie jest połączenie konkurenta 'currentUserFirstName +" "+ currentUserLastName". Jeśli przejdziesz przez ten kod, czy ta linia zostanie wykonana poprawnie? –

+0

Czy możesz podać więcej kodu? Przydatne będzie zobaczenie wartości currentUserFirst i currentUserLast. Firebase zaakceptuje słownik dla setValue, więc nie powinno tam być problemu. Również nie jestem pewien, co jest EventReference. Jeśli mógłbyś podać więcej informacji na ten temat, byłoby to pomocne. –

Odpowiedz

7

Nie ma nic złego w tym kodzie. Zagadnienie to wartości, które są ładowane do

var currentUserFirstName: String! 
var currentUserLastName: String! 

Jako test, stworzyłem przykładowy projekt z następującego kodu, który jest kopią swojej dydaktyczna kodu, ale z normalnych ciągów załadowany do var to:

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

Projekt został skompilowany i działa poprawnie, a oczekiwane dane są zapisywane w Firebase. Zwróć uwagę, że parametr nazwa_zdarzenia.tekst został również zastąpiony ciągiem znaków, ale nie ma to wpływu na odpowiedź.

Dochodzenie musi się odnosić do tego, co zostało załadowane do pliku var, a odpowiedź brzmi, że jedna z tych zmiennych, currentUserFirstName lub currentUserLastName jest ładowana z OBJECT (klasa), a nie z ciągiem znaków.

Na marginesie, dlaczego są var deklarowane jako niejawnie rozpakowanego ewentualne, (przycisk!)

edit: dodanie dodatkowych informacji do czynienia z 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 
} 

Aby zapobiec kod z błędami, gdy opcjonalny nie zawiera żadnej wartości, dodaj powyższy kod bezpośrednio nad linią łączenia kodu. Co się dzieje tutaj, to my przypisujemy ciąg w currentUserFirstName (opcjonalnie var) do faktycznego łańcucha znaków (standardowy, nieobowiązkowy var).

Jeśli wyrażenie ma wartość true, możemy kontynuować analizę currentUserFirstName.

Jeśli jest to fałsz, to currentUserFirstName nie zawiera łańcucha, więc elegancko potraktuj błąd.

+0

Używam zmiennych zadeklarowanych jako nieopakowane opcje, ponieważ używam wartości i przekazuję je pomiędzy segues. Spróbuję się z tym pogodzić i dam ci znać. – user1871869

+0

Aktualizacja: starałem się zadeklarować zmienne w ten sposób: 'var currentUserFirstName: String',' var currentUserLastName: String', 'var currentUserObjectID: String', ale pojawia się komunikat o błędzie" nie wymieniany na "StringLiteralConvertible" ' – user1871869

+0

Wygląda na to, że masz rację. Deklaracja zmiennej jako typu 'String' wpływa na moją zdolność do przechowywania wartości w Firebase. W każdym razie dookoła tego? Nadal chcę przekazać te wartości pomiędzy segues i zapisać je w mojej bazie danych Firebase. – user1871869