2017-03-13 5 views
0

Wenn ich einen Array bin Abrufen, ich bin mit dieser Funktion:Firebase stürzt manchmal, aber nicht immer

self.gameRef!.observeSingleEvent(of: .value, with: { (snapshot) in 
        let value = snapshot.value as? NSDictionary 
        let seeds = value?["seed"] as! [Int] 
} 

Das ist mein Fehler ist:

enter image description here

Dies ist meine Struktur:

enter image description here

jedoch mo st der Zeit es funktioniert. Manchmal bekomme ich diesen Absturz. Ich habe keine Idee warum. Danke für Ihre Hilfe.

+0

Der Grund, Sie werden immer den Absturz am meisten vielleicht nehmen wollen, weil Sie Kraft sind Abwickeln auf [Int] statt optionales Auspacken Nun, warum Ihr Array manchmal kein Int-Array ist, ist eine andere Frage, die mehr Informationen darüber benötigt, warum sie nicht erkannt wird. – Prientus

+0

Ja, es ist seltsam ... Der Seed ist immer verfügbar, bevor er abgefragt wird. – Petravd1994

+0

Haben Sie versucht, "Wert" auszudrucken, wenn es abstürzt, um zu sehen, was es enthält? Sie können Ihre Ausnahme-Breakpoints aktivieren, und wenn sie in der Zeile kurz vor einem Absturz pausiert, kann sie "Wert" ausgeben und sehen, was sie zu diesem Zeitpunkt enthält. – Prientus

Antwort

0

Ich würde versuchen, Snapshot-Wert

self.gameRef!.observeSingleEvent(of: .value, with: { (snapshot) in 

      if let value = snapshot.value as? [String:[Int]], let seeds = value["seed"]{ 
      //continue 
} 
} 
0

Das Problem ist, dass, wenn Sie Ints verwenden in einer sequentiellen Weise Firebase behandelt sie wie Arrays auszupacken. Und du schreibst das wie ein Wörterbuch. Sie sollten mit Ints wie Schlüssel vermeiden, denn:

if all of the keys are integers, and more than half of the keys between 0 and the maximum key in the object have non-empty values, then Firebase will render it as an array

Sie vielleicht einen Blick auf this answer too.

Verwandte Themen