2016-03-24 8 views
0

По какой-то причине мои данные не загружаются в мое табличное представление. Функция fetchTasks работает, потому что, если я добавлю к ней контрольную точку, она сообщит мне, что у tasks есть 151 Задачи, но когда я пытаюсь распечатать задания из любой точки за пределами функции , она сообщает мне, что задачи представляют собой пустой массив , Я бы предположил, что именно поэтому моя функция updateTableView не работает. Когда я печатаю каждую из этих переменных, он также дает мне пустой массив. Я не получаю никаких ошибок в Xcode, поэтому немного разочаровываю, что я не могу заставить это работать. Любая помощь будет большой. Я уже сделал тонну гуглинга. Заранее спасибо.Данные TableView не загружаются

class TasksTVC: UITableViewController, TaskCellDelegate { 


    let ref = Firebase(url: URL) 
    var cell = TaskCell() 
    var team = "" 
    var sectionTimes = [String]() 
    var tasksInSectionArray = [[Task]]() 
    var tasks = [Task]() { 
     didSet { 
      tableView?.reloadData() 
     } 
    } 

    func fetchTasks() { 
     let tasksRef = Firebase(url: "\(self.ref)/tasks") 
     tasksRef.queryOrderedByChild("team").queryEqualToValue(team).observeEventType(.Value, withBlock: { snapshot in 
      var newTasks = [Task]() 
      for task in snapshot.children { 
       let tasks = Task(snapshot: task as! FDataSnapshot) 
       newTasks.append(tasks) 
      } 
      self.tasks = newTasks 
      self.tableView.reloadData() 
     }) 
    } 

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


    override func viewDidLoad() { 
     super.viewDidLoad() 
     updateTableView() 
     self.tableView.rowHeight = UITableViewAutomaticDimension 
     self.tableView.estimatedRowHeight = 44.0 
    } 

    func updateTableView() { 
     sectionTimes = Set(tasks.map{$0.dueTime}).sort() 
     tasksInSectionArray = sectionTimes.map{section in tasks.filter{$0.dueTime == section}} 
     print("section times:\(sectionTimes)") 
     print(tasksInSectionArray) 
     tableView.reloadData() 
    } 


    // MARK: - Table view data source 

    override func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String? { 
     return sectionTimes[section] 
    } 

    override func numberOfSectionsInTableView(tableView: UITableView) -> Int { 
     return sectionTimes.count 
    } 

    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     return tasksInSectionArray[section].count 
    } 


    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
     let cell = tableView.dequeueReusableCellWithIdentifier("TaskCell", forIndexPath: indexPath) as! TaskCell 

     // Configure the cell... 
     cell.selectionStyle = .None 
     let task = tasksInSectionArray[indexPath.section][indexPath.row] 
     cell.label.text = task.title 
     if task.done == true { 
      cell.checkBox.image = UIImage(named: "checkedbox") 
      cell.detailLabel.text = "Completed By: \(task.completedBy)" 
      } 
      else { 
      cell.checkBox.image = UIImage(named: "uncheckedbox") 
      cell.detailLabel.text = "" 
      } 

     cell.delegate = self 
     return cell 
    } 


} 
+0

Что делать, если вы используете dispatch_async для размещения reloadData в главной очереди? –

+0

Какой reloadData? Updatetableview()? –

+0

Извините ... Я имел в виду внутри блока, который вы отправляете на запрос. –

ответ

0

Похоже, что вы никогда не называя updateTableView после извлечения ваших задач. Это метод, который правильно упорядочивает данные для представления таблицы.

+0

Я назвал его viewDidLoad. Я все еще новичок в Свифте. Где еще я мог бы это назвать? –

+0

Вам нужно называть это снова 'after', у вас есть все ваши данные. – laynemoseley

Смежные вопросы