Firebase数据未加载到tableview数据模型中

时间:2017-06-29 20:18:35

标签: ios arrays uitableview firebase swift3

给定代码中的问题是,Firebase数据在返回之前未加载到数组中。由于我是swift的新手,我对我的数据模型设置非常满意,这些数据模型设置为将多个部分加载到tableview中并且不想更改所有内容。唯一的问题是,正如我所说,Firebase数据收集器需要某种完成处理程序,但我真的不知道如何应用它们,我也不知道如何更改以下代码......

这是定义对象的类:

  class Platzart
{

var Courts: [Court]
var name: String

init(name: String, Courttypes: [Court]) {


    Courts = Courttypes
    self.name = name

}

class func getCourts() -> [Platzart]
{

    return [self.AllSoccer(), self.AllBasketball(), self.Test(), self.Test2()]

}

}

这是收集对象并将它们加载到多个数组中的类,然后使用tableViewController中的getCOurts函数调用它们:

   private class func AllSoccer() -> Platzart {

    var allSoccer = [Court]()

    let databaseref = FIRDatabase.database().reference()

    databaseref.child("Court").child("Fußball").observe(.childAdded, with: { (snapshot) in



        if let Courtdictionary = snapshot.value as? [String : Any] {

            let city = Courtdictionary["Stadt"] as? String
            let district = Courtdictionary["Stadtteil"] as? String
            let street = Courtdictionary["Strasse"] as? String
            let surface = Courtdictionary["Untergrund"] as? String
            let latitude = Courtdictionary["Breitengrad"] as? String
            let longitude = Courtdictionary["Laengengrad"] as? String
            let size = Courtdictionary["Groesse"] as? String
            let Userupload = Courtdictionary["Hochgeladen"] as? String
            let timestamp = Courtdictionary["Upload_Zeitpunkt"] as? Int
            let numberofHoops = Courtdictionary["AnzahlToreKoerbe"] as? String
            let courttype = Courtdictionary["Platzart"] as? String

            allSoccer.append(Court(AnzahlToreKoerbeString: numberofHoops!, BreitengradString: latitude!, GroesseString: size!, HochgeladenString: Userupload!, LaengengradString: longitude!, StadtString: city!, StadtteilString: district!, StrasseString: street!, UntergrundString: surface!, UploadTime: timestamp!, PlatzartString: courttype!))
            print(allSoccer)


        }
    })

    return Platzart(name: "Fußballplatz", Courttypes: allSoccer)
}

这是一个加载数据的私有类函数示例:

class CourtlistViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {

 lazy var Courtarrays: [Platzart] = {

    return Platzart.getCourts()

}()

@IBOutlet weak var CourtlisttableView: UITableView!
override func viewDidLoad() {
    super.viewDidLoad()
    CourtlisttableView.delegate = self
    CourtlisttableView.dataSource = self
   }

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    CourtlisttableView.reloadData()
}

   func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {

   let Courttype = Courtarrays[section]

    return Courttype.name

}

func numberOfSections(in tableView: UITableView) -> Int {


    return Courtarrays.count

}

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {


    return Courtarrays[section].Courts.count

}

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


    let cell = CourtlisttableView.dequeueReusableCell(withIdentifier: "Court Cell", for: indexPath) as! CourtCell

    let Platzarray = Courtarrays[indexPath.section]
    let Sportplatz = Platzarray.Courts[indexPath.row]


    cell.updateUI(Sportplatz)

    return cell

    }

}

然后将数据加载到tableview中:

<script>
$.getJSON(url1, function (data1) {
    $.getJSON(url2, function (data2) {
        $.getJSON(url3, function (data3) {

            //do stuff with data1, data2, data3
        });
    });    
});
</script>

此过程适用于我手动附加到数组的数据。对于Firebase部分(AllSoccer()和AllBasketball()),只加载和显示标题。

0 个答案:

没有答案