2017-10-28 17 views
0

Ich habe eine iOS App mit meiner Firebase verbunden, in der ich eine Klasse habe, in der ich alle Links zur Firebase-Datenbank definiert habe.Firebase App stürzt beim Start ab swift

AppDelegate.swift enthält eine init() Methode also, Firebase ist die erste, die initialisiert wird.

override init() { 
    super.init() 
    FirebaseApp.configure() 

} 

Firebase Data wo alle DB Pfade definiert sind.

import Firebase 
import FirebaseDatabase 

let DB_URL: DatabaseReference = Database.database().reference() 
let ST_URL: StorageReference = Storage.storage().reference() 
let uid = Auth.auth().currentUser?.uid 

class FBDataservice { 
//... other code 
} 

Nun, sobald ich die App starten, bekomme ich einen Fehler

fatal error: unexpectedly found nil while unwrapping an Optional value 

Dieser Fehler auf der uid Definition in Dataservice-Klasse hergestellt wird.

Nun, soweit ich verstehe, ist dies, weil die UID initialisiert werden kann, auch wenn es keinen Benutzer gibt.

Ich bin von Ideen, wie dies zu implementieren ist. Ich habe in meinem gesamten Projekt viele Hinweise auf uid. Was ist der geeignetste Weg dies zu tun?

Dank

Antwort

3

Sie könnten die observeAuthEventWithBlock verwenden möchten.

Um auf Änderungen im Authentifizierungsstatus zu warten, hängen Sie ein Ereignis observer mit observeAuthEventWithBlock an. Wenn derzeit kein Benutzer authentifiziert ist, ist authData gleich Null.

Sie es wie folgt implementieren nach dem reference:

let ref = Firebase(url: "https://<YOUR-FIREBASE-APP>.firebaseio.com") 
ref.observeAuthEventWithBlock({ authData in 
    if authData != nil { 
     // user authenticated 
     println(authData) 
    } else { 
     // No user is signed in 
    } 
}) 
+0

sollte ich dies mit der 'Firebase.config' in AppDelegate implementieren. wenn nicht, wo ist das zu sagen? –

+0

@AakashDave, überwachen diese in Ihrem 'viewController'. –

+0

Ich hatte einen kleinen Fehler gemacht. Aber dank dir hast du mir geholfen, auf einen großen Fehler in meinem Code hinzuweisen. Danke und Prost! –

0

Ich bin mir nicht ganz sicher, wo Sie Ihren Code initialisiert wird. Mögliche Lösungen:

  1. Verwenden Wache Anweisung guard let userID = Auth.auth().currentUser?.uid else {return}

  2. Versuchen Sie diesen Code in einer Funktion setzen, die eine optionale Zeichenfolge zurück.

  3. Wenn Sie überprüfen möchten, ob der Benutzer vor didFinishLaunchingWithOptions vorhanden ist, erstellen Sie eine if else-Anweisung oder eine Guard-Anweisung wie die obige. if Auth.auth().currentUser?.uid != nil
  4. Wenn Sie Cocoapods verwenden, versuchen Sie mit pod update
  5. Wenn diese nicht funktioniert, versuchen Sie die Kapsel erneut zu installieren.
  6. Rufen Sie FirebaseApp.configure() in DidFinishLaunchingWithOptions in AppDelegate und True zurück.