2017-10-28 14 views
0

firebase-databaseへのすべてのリンクを定義したクラスがあるfirebaseにiosアプリが接続されています。Firebaseの起動時にアプリケーションがクラッシュする

AppDelegate.swiftにはaa init()メソッドが含まれていますので、Firebaseが最初に初期化されます。

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

} 

すべてのDBパスが定義されているDataservice。

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 
} 

は、今のようにすぐに私はアプリを起動して、私はこのエラーは、DataServiceのクラスのUID定義に行われ

fatal error: unexpectedly found nil while unwrapping an Optional value 

エラーが発生します。

私が理解する限り、これは、ユーザーがいなくてもuidが初期化されるためです。

私はこれを実装する方法については考えていません。私は私のプロジェクト全体で多くのUIDを参照しています。これを実行する最も適切な方法は何ですか?

おかげ

答えて

3

あなたはobserveAuthEventWithBlock使用する場合があります。

認証ステートの変更をリスンするには、observeAuthEventWithBlockを使用して オブザーバをイベントに接続します。現在 のユーザーが認証されていない場合、authDataはnilになります。

あなたは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

これをappDelegateの 'Firebase.config'で実装する必要があります。もしそうでなければ、これはどこに置かれますか? –

+0

@AakashDave、あなたの 'viewController'でこれを監視してください。 –

+0

私は小さな誤りを犯しました。しかし、あなたのおかげで、私のコードの大きなバグを指摘してくれました。感謝と乾杯! –

0

私はあなたのコードを初期化しているところはかなりわかりません。 考えられる解決策:

  1. 使用ガード声明guard let userID = Auth.auth().currentUser?.uid else {return}

  2. は、オプションの文字列を返す関数にこのコードを入れてみてください。

  3. didFinishLaunchingWithOptionsの前にユーザーが存在するかどうかを確認する場合は、上記のようなif文またはguard文を作成します。 if Auth.auth().currentUser?.uid != nil
  4. あなたがCocoapodsを使用している場合、これらが動作していない場合は、ポッドを再インストールしてみてくださいpod update
  5. てみてください。
  6. appDelegateのdidFinishLaunchingWithOptionsのFirebaseApp.configure()を呼び出してtrueを返します。
関連する問題