2016-09-19 2 views
0

Ich verwende Firebase in einer iOS App, die mit Swift geschrieben wurde.SetValue verhält sich nicht wie erwartet

static func createUserRecord(uid: String, user: User){ 
     let userDictionary = user.getJSON() 
     self.usersRef.child(uid).setValue(userDictionary) 
    } 

Dieser Code funktioniert ganz gut, bevor ich meine App freizugeben und nach der App der Freigabe konnte ich nicht mehr Benutzerdatensätze hinzugefügt bekommen, alle andere Funktionalitäten der App arbeiten gut, einschließlich der Speicherung und einige Daten abruft. Kann jemand den Fehler in diesem Code finden?

Funktioniert setValue auch wenn der Pfad nicht da war? z.B. wenn der Pfad a/b/ ist da, und ich rief a/b/c.child('d').setValue("abcd"). Ob das funktioniert?

+0

Sie Regeln Firebase Sicherheit eingerichtet, um diese Daten zu ermöglichen gerettet werden? – chickenparm

+0

Der Aufruf von 'setValue()' erstellt den Pfad, wenn er noch nicht existiert. Es scheint wahrscheinlicher, dass Ihr 'user.getJSON' etwas enthält, das gemäß der Datenbank (oder Ihrer Sicherheitsregeln) ungültig ist. Sie sollten einen Abschlussblock anhängen, um dies zu erkennen: https://firebase.google.com/docs/reference/ios/firebasedatabase/interface_f_i_r_database_reference.html#a1107cae145ab12e1ef58ab9f8713b84d –

+0

@chickenparm Ja, sie sind beide wahr für lesen und schreiben, ich habe ein weiteres Problem mit dem Hochladen von Bildern in den Speicher, (es funktionierte vor einer Stunde noch gut) könnte dies ein Problem mit der Bandbreite sein? Soll ich den Plan aufrüsten? – iShaalan

Antwort

2

Der Aufruf setValue() wird den Pfad erstellen, wenn er noch nicht existiert.

Es scheint wahrscheinlicher, dass Ihr user.getJSON() etwas enthält, das laut der Datenbank (oder Ihrer Sicherheitsregeln) ungültig ist.

Sie möchten attach a completion block, um dies zu erkennen.

Hier ist ein Beispiel aus der Dokumentation Stackoverflow zu tun:

Ein häufiger Grund, warum Ihr Lesevorgang möglicherweise nicht ist, weil Ihre Sicherheitsregeln die Operation ablehnen, zum Beispiel, weil Sie nicht authentifiziert (standardmäßig kann auf eine Datenbank nur von einem authentifizierten Benutzer zugegriffen werden).

Sie können diese Sicherheitsregelverletzungen in der Konsolenausgabe sehen. Aber ist es leicht, diese zu übersehen. Sie können sie auch in Ihrem eigenen Code behandeln und sie besser sichtbar machen, was besonders nützlich ist während der Entwicklung (da Ihre JSON, Regeln und Code häufig ändern).

Zur Erkennung einer auf iOS lesen failed Sie die withCancel Block Ihrer Beobachter implementieren müssen:

ref!.child("notAllowed").observe(.value, with: { (snapshot) in 
    print("Got non-existing value: \(snapshot.key)") 
}, withCancel: { (error) in 
    print(error) 
}) 
Verwandte Themen