Firebase数据未在TableView中显示

时间:2016-06-16 08:39:19

标签: ios swift uitableview firebase firebase-realtime-database

所以基本上我想从Firebase获取数据并将其放入tableView中,然后当删除一个单元格时,我想从firebase和表视图中删除数据......但是我的代码数据不均匀出现在TableView中,我真的不知道出了什么问题......?

这是我的数据库结构,如果有帮助的话: Structure

我将数据放入Courses然后是childByAutoId,其中包含CourseName,AmountOfHoles和AddedDate然后将其放回快照中,将快照存储在名为courses的数组中,然后在cellForRowAtIndexPath中获取单元格的变量,但不知何故单元格是没有在tableView上显示...然后我会删除commitEditingStyle中的单元格和数据,但它甚至没有达到,因为单元格不会显示...

我是StackOverflow的新手,所以请原谅我,如果有什么东西看起来很愚蠢或者错误......别打扰告诉我......

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)

  }


}

2 个答案:

答案 0 :(得分:1)

当你找到快照时,你必须插入你的代码!

我想你可以这样:

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

答案 1 :(得分: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
}