2017-10-01 5 views
0

データベースからisBusyプロパティの値を取得しようとすると問題が発生します。使用されたブレークポイントは、isBusyの値を代入する命令にも行かず、空の文字列を割り当ててelse条件に移ります。ファイアベースから値を取得できません

if docChild == 0 { 
     let selectedDoctor = Doctors.doc1 
     var isBusy = String() 

     databaseHandle = reference.child(selectedDoctor).child(dateChild).child(timeChild).child(ReservationFields.isBusy).observe(.childAdded, with: { (snapshot) in 
      isBusy = snapshot.value as! String 
     }) 

     if isBusy == "false" { 
      reference.child(selectedDoctor).child(dateChild).child(timeChild).child(ReservationFields.isBusy).setValue("true") 
      reference.child(selectedDoctor).child(dateChild).child(timeChild).child(ReservationFields.firstname).setValue(firstNameLabel.text) 
      reference.child(selectedDoctor).child(dateChild).child(timeChild).child(ReservationFields.lastname).setValue(lastNameLabel.text) 
      reference.child(selectedDoctor).child(dateChild).child(timeChild).child(ReservationFields.pesel).setValue(peselLabel.text) 
      reference.child(selectedDoctor).child(dateChild).child(timeChild).child(ReservationFields.telephone).setValue(phoneLabel.text) 


     } else { 
      createAlert(title: "Przepraszamy - termin jest zajęty", message: "Proszę wybrać inny termin") 

     } 

database

答えて

1

答えはかなり単純です。 Firebaseデータベースリクエストは非同期であるため、if isBusy == "false"ステートメントに達すると、その値はデータベースから取得されませんでした。あなたのコードは、それに応じて変更します。

if docChild == 0 { 
    let selectedDoctor = Doctors.doc1 
    var isBusy = String() 

    databaseHandle = reference.child(selectedDoctor).child(dateChild).child(timeChild).child(ReservationFields.isBusy).observe(.childAdded, with: { (snapshot) in 
     isBusy = snapshot.value as! String 
     if isBusy == "false" { 
      reference.child(selectedDoctor).child(dateChild).child(timeChild).child(ReservationFields.isBusy).setValue("true") 
      reference.child(selectedDoctor).child(dateChild).child(timeChild).child(ReservationFields.firstname).setValue(firstNameLabel.text) 
      reference.child(selectedDoctor).child(dateChild).child(timeChild).child(ReservationFields.lastname).setValue(lastNameLabel.text) 
      reference.child(selectedDoctor).child(dateChild).child(timeChild).child(ReservationFields.pesel).setValue(peselLabel.text) 
      reference.child(selectedDoctor).child(dateChild).child(timeChild).child(ReservationFields.telephone).setValue(phoneLabel.text) 


     } else { 
      createAlert(title: "Przepraszamy - termin jest zajęty", message: "Proszę wybrać inny termin") 

     } 
    }) 

あなたはそれがあなたの値がフェッチされた後を実行されますので、私は単に、にハンドラコードを動かす見ることができるように。

+0

XCodeは私に自己を書くように言った。多くの場所で、今はisBusyと次の命令に値を割り当てる命令には行きません。 – iX0ness

関連する問題