2017-08-01 16 views
1

Firebaseデータベースからテーブルビューを更新しようとしています。テーブルビューがFirebaseで更新されない

  1. レポート:
    • ランダムに生成されたレポートのID番号:
      • メイク:
    • を "車の作る" マイデータは、この(自動車を報告するため)のように構成されています
      • モデル:「モデルの作成」

私は正しくデータを呼び出していないと思います。ランダムなレポートIDを選択する方法がわかりません。しかし、私が紛失していることが他にもあるかもしれません。私はこれをテストすることはできないんだけど、私はあなたがしようとしていたことを感じているセルのテキストで

var reportList:[String] = [] 

var ref: DatabaseReference! 

var handle: DatabaseHandle? 


@IBOutlet weak var reportsTableView: UITableView! 

@IBAction func backButtonPressed(_ sender: UIBarButtonItem) { 
    self.performSegue(withIdentifier: "reportsToHome", sender: self) 
} 

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

} 


public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell{ 
    let cell = UITableViewCell(style: .default, reuseIdentifier: "cell") 

    cell.textLabel?.text = reportList[indexPath.row] 

    return cell 
} 


override func viewDidLoad() { 
    super.viewDidLoad() 

    ref = Database.database().reference() 

    handle = ref.child("Reports").observe(.childAdded, with: { (snapshot) in 
     if (snapshot.value as? String) != nil 
     { 
      let make = String(describing: self.ref.child("Reports").child("make")) 
      let model = String(describing: self.ref.child("Reports").child("model")) 
      self.reportList.append(make + model) 

      self.reportsTableView.reloadData() 
     } 
    } 

    // Do any additional setup after loading the view. 
)} 

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

}

+0

複数のレポートを取得しようとしていますか、または1つのレポートしかありませんか? – Grady

+0

複数のレポートがあります。データベースは、新しいレポートが入ったかどうかをチェックして、それを投稿します。または、少なくともそれが想定されています。 – Bob

答えて

2

を表示するには、車両の唯一の製造元とモデルを取得しようとしていますスナップショットを文字列としてキャストする。代わりに、キーでデータを簡単に取得できるように、辞書としてキャストする必要があります。

このコードを試してください。これは、辞書としてスナップショットを設定し、そこからあなたは、製造元とモデルを取得することができます。さらに行く

override func viewDidLoad() { 
super.viewDidLoad() 

ref = Database.database().reference() 

handle = ref.child("Reports").observe(.childAdded, with: { (snapshot) in 
    if let reports = snapshot.value as? NSDictionary { 
     var make = reports?["make"] as? String 
     var model = reports?["model"] as? String 

     self.reportList.append(make + model) 
     self.reportsTableView.reloadData() 
    } 
} 
)} 

、あなたがレポートクラスを作成することができます。

class Report: NSObject { 
    var make: String? 
    var model: String? 
} 

あなたはその後、設定することができますスナップショットからモデルとモデルを作成して、新しいReportオブジェクトを作成します。

var make = reports?["make"] as? String 
var model = reports?["model"] as? String 
let newReport = Report() 
newReport.setValuesForKeys(reports) 

これがうまくいけば、私はもう一度見ます。

+1

私はそれを試しましたが、うまくいきませんでした。私はその間にReportクラスで遊んでいきます。編集:心配しないでください。それはうまくいけば、私は編集時に誤って削除した。助けてくれてありがとう! – Bob

関連する問題