2016-05-15 8 views
1

サインイン/アウトのボタンを持つサインイン/アウトアプリを作成しています。たとえば、サインインしている場合は、「サインアウト」と表示されます。彼らがサインインしているかどうかについての情報はすべてFirebaseから得られます。ref.observeSingleEventOfTypeのfirebase&swiftコードが実行されていません

とにかく、私はbool now_inに値を与えようとしています... ref.observeSingleEventOfType(.Value ...コードブロックですが、プログラムは決してそこに入りません。 )それは、プログラムを停止したことがない

私はあなたが提供できるものは非常に参考になるFirebaseとスウィフト、さらにはStackOverflowのに非常に新しいんだありがとう

func refresh_sign_in_out_button() { 
    var button_title = "SIGN IN/OUT" 

    if let op_user = user { 
     var currently_in: Bool? 

     op_user.user_ref!.observeSingleEventOfType(.Value, withBlock: { snapshot in 
      currently_in = (snapshot.childSnapshotForPath("current_status").value as! String == "IN") 
      print(currently_in) 
     }) 

     if !currently_in! { 
      button_title = "SIGN IN" 
      type_of_log_in.hidden = false 
      sign_in_out_button.setTitleColor(UIColor(red: 0.349, green: 0.89, blue: 0.0, alpha: 1.0), forState: UIControlState.Normal) 
     } else { 
      button_title = "SIGN OUT" 
      op_user.user_log_in_type = type_of_log_in_label.text 
      type_of_log_in.hidden = true 
      sign_in_out_button.setTitleColor(UIColor(red: 0.922, green: 0.0, blue: 0.231, alpha: 1.0), forState: UIControlState.Normal) 
     } 
    } else { 
     button_title = "SIGN IN" 
     type_of_log_in.hidden = false 
     sign_in_out_button.setTitleColor(UIColor(red: 0.349, green: 0.89, blue: 0.0, alpha: 1.0), forState: UIControlState.Normal) 
    } 

私のプロジェクトはここにあります。。!: Sign In/Out App

ファイアベースstru cture:

{ 
    "mentors" : { 
    "Ash Dreyer" : { 
     "current_status" : "IN", 
     "logins" : [ null, { 
     "sign_in_time" : "2016-05-15 18:44:59 +0000" 
     } ], 
     "num_of_logins" : 0, 
     "total_hours" : 0 
    }, 
    "Donald Pinckney" : { 
     "current_status" : "OUT", 
     "num_of_logins" : 0, 
     "total_hours" : 0 
    }, 
    "Jasmine Zhou" : { 
     "current_status" : "OUT", 
     "num_of_logins" : 0, 
     "total_hours" : 0 
    }, 
    "Michael Corsetto" : { 
     "current_status" : "OUT", 
     "num_of_logins" : 0, 
     "total_hours" : 0 
    } 
    }, 
    "students" : { 
    "Bryton Moeller" : { 
     "current_status" : "OUT", 
     "num_of_logins" : 0, 
     "total_hours" : 0 
    }, 
    "Kelly Ostrom" : { 
     "current_status" : "OUT", 
     "num_of_logins" : 0, 
     "total_hours" : 0 
    }, 
    "Kyle Stachowicz" : { 
     "current_status" : "OUT", 
     "num_of_logins" : 0, 
     "total_hours" : 0 
    }, 
    "Wesley Aptekar-Cassels" : { 
     "current_status" : "IN", 
     "logins" : [ null, { 
     "sign_in_time" : "2016-05-15 16:14:11 +0000" 
     } ], 
     "num_of_logins" : 0, 
     "total_hours" : 0 
    } 
    } 
} 

データは1年間のみ必要とされているので、私は学生や指導者のためのユーザーIDを持っていないし、我々は新しいデータに置き換えます。

+0

「var currently_in:Bool」という行が表示されますか?あなたはゼロ値を取得しようとしている参照ですか? – PyPiePi

答えて

1

私は友人とこれについて話し、彼は私の問題を解決しました。ここから私のコードです:

func refresh_sign_in_out_button(currently_in: Bool) { 
    var button_title = "SIGN IN/OUT" 

    if let op_user = user { 
     if !currently_in { 
      button_title = "SIGN IN" 
      type_of_log_in.hidden = false 
      sign_in_out_button.setTitleColor(UIColor(red: 0.349, green: 0.89, blue: 0.0, alpha: 1.0), forState: UIControlState.Normal) 
     } else { 
      button_title = "SIGN OUT" 
      op_user.user_log_in_type = type_of_log_in_label.text 
      type_of_log_in.hidden = true 
      sign_in_out_button.setTitleColor(UIColor(red: 0.922, green: 0.0, blue: 0.231, alpha: 1.0), forState: UIControlState.Normal) 
     } 
    } else { 
     button_title = "SIGN IN" 
     type_of_log_in.hidden = false 
     sign_in_out_button.setTitleColor(UIColor(red: 0.349, green: 0.89, blue: 0.0, alpha: 1.0), forState: UIControlState.Normal) 
    } 

    sign_in_out_button.setTitle(button_title, forState: .Normal) 
} 

func refresh_sign_in_out_button() { 
    if let op_user = user { 
     op_user.user_ref!.observeEventType(.Value, withBlock: { snapshot in 
      let currently_in = (snapshot.childSnapshotForPath("current_status").value as! String == "IN") 
      print(currently_in) 
      self.refresh_sign_in_out_button(currently_in) 
      }, withCancelBlock: { error in 
       print(error.description) 
     }) 
    } else { 
     refresh_sign_in_out_button(false) 
    } 
} 

私たちはcurrent_statusの値を取得し、それを元の関数に送る別の関数を作成しました。なぜこれが動作するのか分かりませんが、私がここで行ったことを投稿することはできません。

関連する問題