2016-06-16 2 views
0

Так что я хочу получить данные из Firebase и поместить их в таблицуView, а затем, когда ячейка удалена, я хочу удалить данные из firebase и вида таблицы ... но с моим код, данные даже не отображаются в TableView, и я действительно не знаю, что не так ...?Данные Firebase не отображаются в TableView

Вот моя структура базы данных, если это поможет: Structure

Я положил данные в курсах, то в childByAutoId, который содержит CourseName, AmountOfHoles и AddedDate затем получить его обратно в снимке, сохранить снимок в массиве называется курсы а затем получить переменные для ячейки в cellForRowAtIndexPath, но так или иначе ячейка не отображается в таблицеView ... тогда я бы удалил ячейку и данные в commitEditingStyle, но она даже не доходит до этого, потому что ячейки не отображаются ...

Я новичок в StackOverflow, поэтому, пожалуйста, извините меня, если что-то кажется глупым или неправильным ... не беспокойтесь, чтобы сказать m е Тхо ..

class CoursesViewController: UITableViewController { 

    var ref = FIRDatabaseReference.init() 
    override func viewDidLoad() { 

    ref = FIRDatabase.database().reference() 

    tableView.allowsMultipleSelectionDuringEditing = false 


    //let a = ref.childByAutoId() 
    //a.setValue("hi") 

    } 

    var courses: [FIRDataSnapshot]! = [] 

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

    let CoursesRef = ref.child("Courses") 

    CoursesRef.observeEventType(.ChildAdded, withBlock: { snapshpt in 

    self.courses.append(snapshpt) 


    }) 


    } 

    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    return self.courses.count 
    } 


    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> 
    UITableViewCell { 

    let cell: UITableViewCell! = self.tableView .dequeueReusableCellWithIdentifier("ItemCell", forIndexPath: indexPath) 


    let courseSnap: FIRDataSnapshot! = self.courses[indexPath.row] 

    let course = courseSnap.value 

    let coursename = course?.objectForKey("CourseName") as! String 
    let amountofholes = course?.objectForKey("AmountOfHoles") as! String 
    let addeddate = course?.objectForKey("AddedDate") as! String 

    cell.textLabel?.text = coursename + " " + amountofholes + " Holes" 
    cell.detailTextLabel?.text = addeddate 

    return cell 

    } 

    override func tableView(tableView: UITableView, canEditRowAtIndexPath indexPath: NSIndexPath) -> Bool { 
    return true 
    } 

    override func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) { 
    if editingStyle == .Delete { 

    // Find the snapshot and remove the value 
    let courseitem = courses[indexPath.row] 

    courseitem.ref.removeValue() 


    } 
    } 

    @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 'at' HH:mm" 
    let dateString = dateFormatter.stringFromDate(date) 
    print(dateString) 
    // 
    let courseField = alert.textFields![0] 
    let holesField = alert.textFields![1] 





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

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

    Courses.setValue(course) 


    } 


    //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

перезагрузить TableView ... –

+0

вау я теперь чувствую себя глупо ... спасибо ... что работает, но теперь, если я изменить вид и вернуться снова ячейка дублирует ... и если я удалю ее, она не исчезнет.? –

+0

добавить свой viewDidAppear код в viewDidLoad и проверить –

ответ

0

Man вы должны ввести свой код, когда снимок обнаружен!

Я думаю, что вы можете идти, как это:

CoursesRef.observeEventType(.ChildAdded, withBlock: { snapshot in 
    self.courses.append(snapshot) 
    self.yourTable.insertRowsAtIndexPaths([NSIndexPath(forRow: self.courses.count-1, inSection: 0)], withRowAnimation: .Bottom) 
      }) 
+0

.. Я решил это, перезагрузив представление таблицы и поместив lookventtype в viewdidload() ... но я нашел это где-то, и он воскрешает –

0

проверка с этим кодом

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
if(self.courses.count > 0){ 
tablecount = self.courses.count 
} else { 

tablecount = 0 
self.table.reloaddata() 
} 
return tablecount 
} 
Смежные вопросы