0
我尝试将Firebase数据库中的数据显示到我的tableView中。代码使用“选项卡视图控制器”,但为了项目的目的,我不得不在一个经典的ViewController中包含一个TableView。iOS:在tableView中显示firebase数据
这里是应该从数据库中获取数据的代码,并将其包含在tableview中。
import UIKit
import Firebase
import FirebaseAuth
import FirebaseDatabase
class NewsfeedViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {
var ref:DatabaseReference!,
posts = [eventStruct]()
@IBOutlet weak var tableview: UITableView!
struct eventStruct {
let title: String!
let date: String!
let location: String!
}
override func viewDidLoad() {
super.viewDidLoad()
loadNews()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
func loadNews() {
ref = Database.database().reference()
ref.child("events").queryOrderedByKey().observe(.childAdded, with: { (snapshot) in
if let valueDictionary = snapshot.value as? [AnyHashable:String]
{
let title = valueDictionary["Title"]
let location = valueDictionary["Location"]
let date = valueDictionary["Date"]
self.posts.insert(eventStruct(title: title, date: date, location: location), at: 0)
}
})
self.tableview.reloadData()
}
//Table View Content
func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return posts.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)
let label1 = cell.viewWithTag(1) as! UILabel
label1.text = posts[indexPath.row].title
let label2 = cell.viewWithTag(2) as! UILabel
label2.text = posts[indexPath.row].location
let label3 = cell.viewWithTag(3) as! UILabel
label3.text = posts[indexPath.row].date
return cell
}
}
我没有得到任何错误,但数据不显示在tableView中。
以前我不得不为每个控制tableview的函数使用override。如果我没有覆盖,我不应该在代码中的某处调用这些函数,以使它们工作?谢谢。
我已经试过这个解决方案(这是我写的原始版本)。这仍然不能解决问题,不幸的是。 –
@VictorMihaita你调试你的代码是,如果块正在执行,如果你还没有调试的代码,但试图调试它,并检查控制进去,如果阻止或不。 –
我刚刚做到了。数组从数据库中获取正确的数据,我可以打印它的每个元素。我正在重新加载tableView之前正在打印它。所以问题只在于显示数据。 –