2017-10-23 2 views
0

カスタムfirebaseデータベースクラスを作成しようとしています。私はobserveSingleEvent関数を使用してデータベースからデータを抽出し、それを変数に代入してその変数を返そうとしています。問題は、「致命的なエラー:オプションの値をアンラップしている間に予期せずnilが見つかりました」というエラーですが、そのクラス外で使用するため、コードが動作することがわかります。 Heresでクラス変数を宣言し、どこで呼び出すかを指定します。カスタムfirebaseデータベースクラスを作成しようとしています。エラーが発生し続ける

class DataBase { 

    private var ref: DatabaseReference { 
     return Database.database().reference() 
    } 

    var uid: String? = (Auth.auth().currentUser?.uid)! 


    func readMonth() -> String? { 
     var check: String? = "" 
     self.ref.child("Account Data").child(uid!).child("November 2017").observeSingleEvent(of: .value, with: { (snapshot) in 
      let value = snapshot.value as! NSDictionary 
      let checkings = value["Checkings"] as! Double 
      check = String(checkings) 
     }) 
     return check 
    } 

} 

答えて

0

エラーがreadMonth()方式の設計である:

class MainMenuController: UIViewController { 
    var db: DataBase! 

    func readCheckings() { 
     self.checkAmLbl.text = db.readMonth()! 
    } 
} 

は、ここに私のデータベースクラスです。あなたのcheck値を返す前に、が完了してFirebaseが完了するまで、を待つ必要があります。

は、代わりにこれを試してみてください:

func readCheckings() { 
    db.readMonth { (check) in 
     self.checkAmLbl.text = check! 
    } 
} 
+0

動作しませんでした悲しい:

func readMonth(completion: @escaping (String?) -> Void) { self.ref.child("Account Data").child(uid!).child("November 2017").observeSingleEvent(of: .value) { (snapshot) in let value = snapshot.value as! NSDictionary let checkings = value["Checkings"] as! Double let check = String(checkings) completion(check) } } 

は、このようにそれを呼び出します。 – Zach

+0

あなたはどんなエラーになっていますか? –

+0

「db.readMonth((チェックイン)」行に同じエラーがあります。 – Zach

関連する問題