无法将firebase数据库下载到我的应用程序

时间:2017-08-20 15:51:32

标签: ios swift firebase firebase-realtime-database

我是swift编程的新手。我正在尝试制作一个从firebase数据库下载学生数据的应用程序。我无法让应用程序运行。这是我的JSON文件:

{"classA":[
{
"name": "Student1",
"USN": "1DS16CS095"
},
{
"name": "student2",
"USN": "1DS16CS065"
},
{
"name":"student3",
"USN":"1DS16CS047"
}
]
}

这是我下载上述JSON文件并将其放在tableView中的代码。 Modelstudent是我的类,我的变量名称和USN存储。和marksstudentlistTableViewCell是我用来操作原型单元格标签的类。

import UIKit
import Firebase
import FirebaseDatabase

struct StudentData {
let StudentName : String
let StudentUSN : String
}

class marksstudentlist: UIViewController, UITableViewDelegate, UITableViewDataSource{

var FetchedStudentIDs = [StudentData]()

@IBOutlet weak var tableView: UITableView!
var ref: DatabaseReference!
var _selectedsub: Int!
var selectedsub: Int {
    get {
        return _selectedsub
    }set {
        _selectedsub = newValue
    }
}

    override func viewDidLoad() {
        tableView.delegate = self
        tableView.dataSource = self
        if(classselected==0){
        ref = Database.database().reference().child("classA")
        ref.observe(DataEventType.value, with: { (snapshot) in
            if snapshot.childrenCount>0{
                for students in snapshot.children.allObjects as! [DataSnapshot]{
                    let studentObject = students.value as? [String: String]
                    let studentname = studentObject?["name"]
                    let studentUSN = studentObject?["USN"]
                    let student = Modelstudent(name: studentname , USN: studentUSN)
                    self.FetchedStudentIDs.insert(StudentData(StudentName :(studentname as? String!)! , StudentUSN : (studentUSN as? String!)! ) , at: 0)
                }
                self.tableView.reloadData()
            }
        })
  }
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

func numberOfSections(in tableView: UITableView) -> Int {
    return 1
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return FetchedStudentIDs.count
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath:  IndexPath) -> UITableViewCell {

    let cell = tableView.dequeueReusableCell(withIdentifier:     "marksstudentlistcell", for: indexPath) as! marksstudentlistTableViewCell

    cell.namelbl.text = FetchedStudentIDs[indexPath.row].StudentName//    Student name comes from Firebase
    cell.USNlbl.text = FetchedStudentIDs[indexPath.row].StudentUSN
    return cell
}

    @IBAction func backbtn(_ sender: Any) {
    dismiss(animated: true, completion: nil)
}
}

1 个答案:

答案 0 :(得分:2)

使用Swift Struct是在tableView中获取firebase数据的最佳方法,

让我们开始

在你的TableView swift文件上,在类之上,然后粘贴这个

   Struct StudentData {
   let StudentObject : String // If it's
   let StudentName : String // It returns a string right?
   let StudentUSN : String
                   // do the others.
}

好的,然后在类下面创建一个var,调用它

var FetchedStudentIDs = [StudentData]()

然后你从firebase获得了阅读方法

     ref = Database.database().reference().child("classA")
            ref.observe(DataEventType.value, with: { (snapshot) in
                if snapshot.childrenCount>0{
                    self.studentslist.removeAll()
                    for students in snapshot.children.allObjects as! [DataSnapshot]{
                        let studentObject = students.value as? [String: AnyObject]
                        let studentname = studentObject?["name"]
                        let studentUSN = studentObject?["USN"]
                        let student = Modelstudent(name: studentname as! String?, USN: studentUSN as! String?) //storing in Modelstudent class
                        self. 
FetchedStudentIDs.insert(StudentData(studentname:StudentName as! String , studentUSN : StudentUSN as! String  ) , at: 0) // Student name comes from the struct Above, do the others as this
                    }
                    self.tableView.reloadData() // make sure you call this
                }
            })

返回你的tableView

    func numberOfSections(in tableView: UITableView) -> Int {
    return 1
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return FetchedStudentIDs.count
}

您的 CellForRowAtIndexPath

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

      let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! TableViewCell

 cell.exampleLabel.text = FetchedStudentIDs[Indexpath.row].StudentName// Student name comes from Firebase    
    return cell
}

希望这有助于