FirebaseデータベースからtableViewにデータを表示しようとしています。このコードは "Tabs View Controller"を使って機能しましたが、プロジェクトの目的のために、従来のViewControllerにTableViewを含める必要がありました。iOS:firebaseデータをtableViewに表示
ここでは、データベースからデータを取得し、さらにそれを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に表示されません。
以前は、テーブルビューを制御する関数ごとにオーバーライドを使用する必要がありました。オーバーライドしていない場合、それらの関数をコードのどこかで呼び出して、それらを機能させるべきではありません。ありがとうございました。
私はこのソリューションを既に試しています(これは私が書いたオリジナルのバージョンです)。これは残念ながら問題を解決しません。 –
@ VictorMihaitaあなたがコードをデバッグしたことがあるのは、ブロックが実行されている場合に、コードをデバッグせずにデバッグしようとしていて、 –
私はそれをやった。配列がデータベースから正しいデータを取得していて、その各要素を印刷することができます。私は正確にtableViewをリロードする前にそれを印刷していた。したがって、問題はデータを表示することだけです。 –