无法将内容附加到数组

时间:2016-11-01 15:40:55

标签: ios swift firebase firebase-realtime-database

这可能看起来很复杂,但我想它实际上非常简单。

我正在尝试将我在Firebase中的日期传递给我的VC中的tableviewCell

这是我的数据库结构

"2016-10-24 MON" : {
"types" : {
  "LUNCH" : {
    "TypeA" : "2",  //the amount
    "TypeB" : "1",
    "TypeC" : "1"
  },
  "DINNER" : {
    "TypeA" : "1",
    "TypeB" : "2",
    "TypeC" : "3"
  }
}
}
"2016-10-26 WED" : {
"types" : {
  "LUNCH" : {
    "TypeA" : "0",
    "TypeB" : "2",
    "TypeC" : "3"
  },
  "DINNER" : {
    "TypeA" : "2",
    "TypeB" : "2"
  }
}

这是我的代码

class orderDetail: UIViewController, UITableViewDelegate, UITableViewDataSource{

var theARRAY : [(DATES: String, TimeDeliv: String, AmountA:String, AmountB: String, AmountC: String)] = []


 override func viewDidLoad() {

    theREF.observeSingleEvent(of: .value, with: { (snapshot) in 
//theREF is my Firebase Reference



        if let Date = snapshot.value as? [String:AnyObject]{
            for each in Date {

                let orderdate = each.0 as! String

                theREF.child(orderdate).observe(.value, with: { (snapshot) in

                    if snapshot.hasChild("LUNCH") {

                        theREF.child(orderdate).child("LUNCH").observe(.value, with: {(snapshot) in

                     if let snapDict = snapshot.value as? Dictionary <String, AnyObject> {

                                let Num1 = snapDict["TypeA"] as? String
                                let Num2 = snapDict["TypeB"] as? String
                                let Num3 = snapDict["typeC"] as? String


                                self.theARRAY.append((DATES: "\(orderdate)", TimeDeliv:"LUNCH", AmountA:"TypeA \(Num1)", AmountB:"TypeB \(Num2)", AmountC :"TypeC \(Num3)"))

                            }

  })


                        print("LUNCH works \(snapshot)")
                    } else {
                        print ("NONE")
                    }
                })

            }
        }
    }
    )



func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return theARRAY.count
}

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

    let cell = tableView.dequeueReusableCell(withIdentifier: "DetailCell") as! detailCell!


    cell?.detailMealTypeA.text = theARRAY.AmountA
    cell?.detailMealtypeB.text = theARRAY.AmountB
    cell?.detailMealtypeC.text = theARRAY.AmountC
    // these are from UItableViewCell file


    return cell!
}

我想要做的是我想将数据库中的详细信息附加到theARRAY,然后在tableViewCell中添加它们,但我会在0numberOfRowsInSection中获得nilcellForRowAt函数中。

我认为这是因为我在错误的行上致电theARRAY.append

有人可以帮助我吗?

请顺便原谅我讨厌的代码。

1 个答案:

答案 0 :(得分:2)

调用viewDidLoad后,您的桌面视图会立即配置,而无需等待Firebase呼叫完成。

检索完数据后,您需要反映这些更改并更新UI线程。在for循环外添加以下行。

DispatchQueue.main.async
{
  self.tableView.reloadData()
}