2016-06-14 19 views
-1

I only get back "CourseName instead of all the others"私は唯一の代わりに、3つのすべての

Structure of my Firebase Database

のバック一つのアイテムを取得するので、私はその後、シミュレータでアプリを起動し、私はスナップショットを取得し、その後firebaseデータベースに新しい「アイテム」を追加するたびそのスナップショットはviewdid内に出て、次に予想どおりのすべてがコンソールルに表示されますが、@IBActionwhich広告の後にFirebaseのアイテム( - > CourseName、AddDate、AmountOfHoles)をコンソールに取得するだけです(AddedDateとAmonutOfHoleはnilです)しかし、firebaseコンソールですべてが表示されます...? 私はどのようにデータ(AddedDate、CourseName ...)をエラーなしでスナップショットから取得し、それを私のテーブルビューに追加することができますか?

import UIKit 
import Firebase 

class CoursesViewController: UITableViewController { 

var ref = FIRDatabaseReference.init() 


override func viewDidLoad() { 

    ref = FIRDatabase.database().reference() 

} 

//TODO prevent crash when nil 



override func viewDidAppear(animated: Bool) { 
    super.viewDidAppear(animated) 

    var CourseRef = ref.child("Course") 

    //Get Snapshot from Course containing all children 
    var refhandlr = CourseRef.observeEventType(FIRDataEventType.ChildAdded, withBlock: { (snapshot) in 


     let CourseName = snapshot.value!["CourseName"] as! String 
     let AmonutOfHoles = snapshot.value!["AmountOfHoles"] as! String 
     let AddedDate = snapshot.value!["AddedDate"] as! String 

     print(snapshot.value) 


     }, withCancelBlock: { error in 

    }) 

} 




@IBAction func addButtonDidTouch(sender: AnyObject) { 


    // Alert View for input 

    let alert = UIAlertController(title: "Course Item",message: "Add Course",preferredStyle: .Alert) 

    let saveAction = UIAlertAction(title: "Save", style: .Default) { (action: UIAlertAction) -> Void in 

     //Get Date String 
     let date = NSDate() 
     print(date) 

     let dateFormatter = NSDateFormatter() 
     dateFormatter.dateFormat = "dd-MM-yyyy" 
     let dateString = dateFormatter.stringFromDate(date) 
     print(dateString) 

     let courseField = alert.textFields![0] 
     let holesField = alert.textFields![1] 

     let Course = self.ref.child("Course").childByAutoId() 
     let amountOfHolesRef = Course.child("AmountOfHoles") 
     let courseNameRef = Course.child("CourseName") 
     let dateRef = Course.child("AddedDate") 

     courseNameRef.setValue(courseField.text) 
     amountOfHolesRef.setValue(holesField.text) 
     dateRef.setValue(dateString) 

    } 

    //Cancel 
    let cancelAction = UIAlertAction(title: "Cancel", style: .Default) { (action: UIAlertAction) -> Void in 
    } 

    //TextField placeholder in alert 
    alert.addTextFieldWithConfigurationHandler { 
     (courseField: UITextField!) -> Void in 

     courseField.placeholder = "Course Name" 
    } 
    alert.addTextFieldWithConfigurationHandler { 
     (holesField: UITextField!) -> Void in 

     holesField.placeholder = "Holes (6/9/18)" 
    } 

    //Add alert 
    alert.addAction(saveAction) 
    alert.addAction(cancelAction) 

    presentViewController(alert, animated: true, completion: nil) 

} 

}

+0

は[MCVE]お願いします。 – philipxy

答えて

0

あなたがデータに新しい子が/Course/CourseRef.observeEventType(FIRDataEventType.ChildAdded)に表示されるたびに取得しているので、あなたのコードは、イベントリスナーをトリガするだけCourseNameのエントリをログに記録された最初の.setValue(courseField.text)呼び出すとき。

新しいCourseを追加するときは、setValue()を1回だけ呼び出すようにしてください。

あなたのコードは次のようになります。

let Course = self.ref.child("Course").childByAutoId() 

    let course = ["AddedDate": dateString, 
     "CourseName": courseField.text, 
     "AmountOfHoles": holesField.text] 

    Course.setValue(course) 
+0

コースをスナップショットに戻すにはどうすればいいですか?私はセルのラベルのためのcoursenameを得ることができるように配列に入れます。 – LB16

関連する問題