如何在 UITableView 上读取 Firebase 数据库中的数据?

How can I read data from my Firebase database on my UITableView?

提问人:William Daly 提问时间:11/7/2023 最后编辑:William Daly 更新时间:11/7/2023 访问量:44

问:

我是一个相对较新的 Swift 程序员,我是第一次使用 Firebase,所以请原谅我可能有的任何误解和我对术语的缺乏了解。

我正在尝试在我正在制作的应用程序中查看 Firebase 数据库中的数据。虽然我已经获得了从应用程序写入数据库的数据,但我无法让它从数据库读回应用程序。数据应该显示在我已链接的 UITableView 中。

以下是有关从 Firebase 数据库中读取信息并将其显示在表格视图中的主要代码块。我相信问题出在某个地方。下面是项目中涉及的其他两个代码块。

//
//  JobInternshipViewController.swift
//  Final Project
//
//  Created by William Daly on 10/30/23.
//

import UIKit
import Firebase
import FirebaseDatabase

class JobInternshipViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
    
    var jobList = [JobModel]()
   
    @IBOutlet weak var jobTable: UITableView!
    
    public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return jobList.count
    }
    
    public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "CustomCell", for: indexPath) as! JobViewControllerTableViewCell
        
        let job: JobModel
        
        job = jobList[indexPath.row]
        
        cell.lblListID.text = job.listID
        cell.lblTitle.text = job.title
        cell.lblCompany.text = job.company
        cell.lblDatePosted.text = job.datePosted
        cell.lblApplicationDeadline.text = job.applicationDeadline
        cell.lblFulltimeOrIntern.text = job.fulltimeOrIntern
        cell.lblSalary.text = job.salary
        cell.lblLocation.text = job.location
        cell.lblStartingDate.text = job.startingDate
        cell.lblEndingDate.text = job.endingDate
        cell.lblRemoteOrOnsite.text = job.remoteOrOnsite
        
        return cell
    }
    
    
    var refJobs: DatabaseReference!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        refJobs = Database.database().reference().child("Jobs");
    
    
        refJobs.observe(DataEventType.value, with:{(snapshot) in
            if snapshot.childrenCount>0{
                self.jobList.removeAll()
                
                for jobs in snapshot.children.allObjects as![DataSnapshot]{
                    let jobObject = jobs.value as? [String: AnyObject]
                    let jobID = jobObject?["listID"]
                    let jobTitle = jobObject?["Title"]
                    let jobCompany = jobObject?["Company"]
                    let jobDatePosted = jobObject?["DatePosted"]
                    let jobApplicationDeadline = jobObject?["ApplicationDeadline"]
                    let jobFulltimeOrIntern = jobObject?["FulltimeOrIntern"]
                    let jobSalary = jobObject?["Salary"]
                    let jobLocation = jobObject?["Location"]
                    let jobStartingDate = jobObject?["StartingDate"]
                    let jobEndingDate = jobObject?["EndingDate"]
                    let jobRemoteOrOnsite = jobObject?["RemoteOrOnsite"]
                    
                    let job = JobModel(listID: jobID as! String?, title: jobTitle as! String?, company: jobCompany as! String?, datePosted: jobDatePosted as! String?, applicationDeadline: jobApplicationDeadline as! String?, fulltimeOrIntern: jobFulltimeOrIntern as! String?, salary: jobSalary as! String?, location: jobLocation as! String?, startingDate: jobStartingDate as! String?, endingDate: jobEndingDate as! String?, remoteOrOnsite: jobRemoteOrOnsite as! String?)
                    
                    self.jobList.append(job)
                }
                self.jobTable.reloadData()
            }
        })
    }
}

这是 tableviewcell 本身的代码:

//  JobViewControllerTableViewCell.swift
//  Final Project
//
//  Created by William Daly on 10/30/23.
import UIKit

class JobViewControllerTableViewCell: UITableViewCell {
    
    @IBOutlet weak var lblListID: UILabel!
    @IBOutlet weak var lblTitle: UILabel!
    @IBOutlet weak var lblCompany: UILabel!
    @IBOutlet weak var lblDatePosted: UILabel!
    @IBOutlet weak var lblApplicationDeadline: UILabel!
    @IBOutlet weak var lblFulltimeOrIntern: UILabel!
    @IBOutlet weak var lblSalary: UILabel!
    @IBOutlet weak var lblLocation: UILabel!
    @IBOutlet weak var lblStartingDate: UILabel!
    @IBOutlet weak var lblEndingDate: UILabel!
    @IBOutlet weak var lblRemoteOrOnsite: UILabel!
    
    override func awakeFromNib() {
        super.awakeFromNib()
    }

    override func setSelected(_ selected: Bool, animated: Bool) {
        super.setSelected(selected, animated: animated)
    }
}

这是用于生成和定义 jobModel 的代码

//  JobModel.swift
//  Final Project
//
//  Created by William Daly on 10/30/23.
class JobModel
{
    var listID: String?
    var title: String?
    var company: String?
    var datePosted: String?
    var applicationDeadline: String?
    var fulltimeOrIntern: String?
    var salary: String?
    var location: String?
    var startingDate: String?
    var endingDate: String?
    var remoteOrOnsite: String?
    
    init(listID: String?, title: String?, company: String?, datePosted: String?, applicationDeadline: String?, fulltimeOrIntern: String?, salary: String?, location: String?, startingDate: String?, endingDate: String?, remoteOrOnsite: String?)
    {
        self.listID = listID
        self.title = title
        self.company = company
        self.datePosted = datePosted
        self.applicationDeadline = applicationDeadline
        self.fulltimeOrIntern = fulltimeOrIntern
        self.salary = salary
        self.location = location
        self.startingDate = startingDate
        self.endingDate = endingDate
        self.remoteOrOnsite = remoteOrOnsite
    }
}

这是通过我的应用程序将数据输入数据库的方式:

This is how to data is entered into the database via my app

swift 数据库 firebase firebase-realtime-database

评论


答: 暂无答案