使用Firebase数据库信息填充UITableView

时间:2017-04-09 02:45:40

标签: swift firebase swift3 firebase-realtime-database uikit

因此,我尝试使用我的Firebase帐户中的数据库信息填充UITableView。这是在Xcode8,Swift 3中,使用UIKit在我的pod中安装了所有必需的依赖项。

Firebase中的格式如下:

Cell:
    1:
        name: ""
        artist: ""
        picture: ""
        url: ""
    2:
        name: ""
        artist: ""
        picture: ""
        url: ""

        Cont...

以下是我的viewDidLoad()函数中的代码:

override func viewDidLoad() {
    super.viewDidLoad()

    tableView.delegate = self
    tableView.dataSource = self

    //Set firebase refferences
    dbRef = FIRDatabase.database().reference()
    cellRef = dbRef?.child("Cells")

    cellRef?.observe(FIRDataEventType.childAdded, with: {

        (snapshot: FIRDataSnapshot) in

        let artist = snapshot.childSnapshot(forPath: "artist").value as! String
        let title = snapshot.childSnapshot(forPath: "title").value as! String
        let picture = snapshot.childSnapshot(forPath: "picture").value as! String
        let vidURL = snapshot.childSnapshot(forPath: "url").value as! String

        print("\(artist) \n\(title) \n\(picture) \n\(vidURL)")

        let youtubeURL = NSURL(string: vidURL)
        let youtubeRequest = NSMutableURLRequest(url: youtubeURL! as URL)
        youtubeRequest.setValue("https://www.youtube.com", forHTTPHeaderField: "Referer")

        let p1 = AddCell(imageURL: picture ,
                           videoURL: youtubeRequest,
                           songTitle: title,
                           artistName: artist)

        self.addCells.append(p1)

    })
}

请注意,我通过在viewDidLoad()函数中对信息进行硬编码来测试我的表,如下所示。下面的代码工作得很好,并在我的视图中提供了一个表格,其中包含适当的信息和视频链接。

override func viewDidLoad() {
    super.viewDidLoad()

    tableView.delegate = self
    tableView.dataSource = self

    let youtubeURL = NSURL(string: https://www.youtube.com/embed/Fx-EfjsRcBk)
    let youtubeRequest = NSMutableURLRequest(url: youtubeURL! as URL)
    youtubeRequest.setValue("https://www.youtube.com", forHTTPHeaderField: "Referer")

    let p1 = AddCell(imageURL: http://theshotgunseat.com/wp-content/uploads/2015/03/sam-hunt-2014-promo-650x400.jpg,
                           videoURL: youtubeRequest,
                           songTitle: "Body Like A Back Road",
                           artistName: "Sam Hunt")

    self.addCells.append(p1)

正如您在上面的第一个viewDidLoad()函数中看到的那样,我要求打印出我从Firebase收到的信息,我在项目中得到了这个信息:

Sam Hunt 
Body Like A Back Road 
http://theshotgunseat.com/wp-content/uploads/2015/03/sam-hunt-2014-promo-650x400.jpg 
https://www.youtube.com/embed/Fx-EfjsRcBk
Keith Urban 
The Fighter 
https://pbs.twimg.com/profile_images/714823132851400707/bKM-rUs_.jpg 
https://www.youtube.com/embed/GzT4p-OaJ5c

我确信你可以猜到,我的问题是,当我试图直接从Firebase填充它时,它没有加载到我的表中,当我为一首特定歌曲进行硬编码时,它完美地运行

任何帮助都会很棒,如果有什么我错过了解释,我很抱歉,但请你这样澄清!

1 个答案:

答案 0 :(得分:0)

我发现了自己的问题。这就像添加

一样简单
self.tableView.reloadData()

到我的

结尾
cellRef?.observe(FIRDataEventType.childAdded, with: { ...

功能