2016-06-24 66 views
0

我无法呈现从数据库获得的对象。 我声明数组包含我的项目提出:无法在TableViewController中显示Firebase数据库中的项目

var tournaments = [TournamentItem]() 

我的结构的TournamentItem初始化函数:

init(snapshot: FIRDataSnapshot!) { 

    key = snapshot.key 
    ref = snapshot.ref 
    type = snapshot.childSnapshotForPath("type").value as! String 
    name = snapshot.childSnapshotForPath("name").value as! String 
    numberOfParticipants = snapshot.childSnapshotForPath("numberOfParticipants").value as! Int 
    tournamentMode = snapshot.childSnapshotForPath("mode").value as! Bool 
    completed = snapshot.childSnapshotForPath("completed").value as! Bool 
} 

功能来获取数据的样子:

func getTournamentListSnapshot() { 

    ref.observeEventType(.Value, withBlock: { snapshot in 

     //print("\(snapshot.key) -> \(snapshot.value)") 


     for item in snapshot.children { 

      let tournamentItem = TournamentItem(snapshot: item as! FIRDataSnapshot) 
      self.tournaments.append(tournamentItem) 

     } 
     if self.tournaments.isEmpty { //not a subject of discussion 
      self.showAlertOfEmptyTournamentsArray() 
     } 

    }) 
} 

而且我里面调用此我的ViewDidLoad方法。 问题是,在调用此方法后,我的数组是空的,但Firebase数据库不是。 我试图调试这整个事情,但我找不到解决这个问题的任何解决方案。

我TableViewController委托方法是这样的:

override func numberOfSectionsInTableView(tableView: UITableView) -> Int { 

    return 1 
} 

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 

    return self.tournaments.count 
} 
+1

难道你忘了叫'tableView.reloadData()'如果自我.tournaments.isEmpty {//不是讨论主题 self.showAlertOfEmptyTournamentsArray() }'? – Santosh

+0

您是否在从observeEventType异步回调之后检查数组? –

+0

@Santosh在这里就是这种情况。现在它工作正常,谢谢! – michalbanan

回答

2

呼叫tableView.reloadData()后,也可以是else:`后

if self.tournaments.isEmpty { 
    self.showAlertOfEmptyTournamentsArray() 
} 
tableView.reloadData() 
+0

你需要点击绿色的右标记来接受它,而不仅仅是upvoting。 – Santosh

相关问题