2017-09-15 104 views
-1

我正在嘗試從單擊到導航控制器的單元格中獲取數據。 (然後將數據在標籤我希望有一個排序的額外信息選項卡)這是我走到這一步:Firebase在表格視圖和導航視圖之間傳遞的數據

這是自我介紹Post類:

class Post { 
    let ref: DatabaseReference! 
    var TypeControle: String = "" 
    var Stad: String = "" 
    var Tijd: String = "" 
    var Latitude: String = "" 
    var Longitude: String = "" 
    var Extrainformatie: String = "" 

    init(TypeControle: String) { 
     self.TypeControle = TypeControle 
     ref = Database.database().reference().child("Rollerbanken").childByAutoId() 
    } 
    init(Stad: String){ 
     self.Stad = Stad 
     ref = Database.database().reference().child("Rollerbanken").childByAutoId() 
    } 
    init(Tijd: String) { 
     self.Tijd = Tijd 
     ref = Database.database().reference().child("Rollerbanken").childByAutoId() 
    } 
    init(Latitude: String) { 
     self.Latitude = Latitude 
     ref = Database.database().reference().child("Rollerbanken").childByAutoId() 
    } 
    init(Longitude: String) { 
     self.Longitude = Longitude 
     ref = Database.database().reference().child("Rollerbanken").childByAutoId() 
    } 
    init(Extrainformatie: String) { 
     self.Extrainformatie = Extrainformatie 
     ref = Database.database().reference().child("Rollerbanken").childByAutoId() 
    } 

    init() { 
     ref = Database.database().reference().child("Rollerbanken").childByAutoId() 
    } 

    init(snapshot: DataSnapshot) 
    { 
     ref = snapshot.ref 
     if let value = snapshot.value as? [String : Any] { 
      TypeControle = value["TypeControle"] as! String 
      Stad = value["Stad"] as! String 
      Tijd = value["Tijd"] as! String 
      Latitude = value["Latitude"] as! String 
      Longitude = value["Longitude"] as! String 
      Extrainformatie = value["Extrainformatie"] as! String 

     } 
    } 

    func save() { 
     ref.setValue(toDictionary()) 
    } 

    func toDictionary() -> [String : Any] 
    { 
     return [ 
      "TypeControle" : TypeControle, 
      "Stad" : Stad, 
      "Tijd" : Tijd, 
      "Latitude" : Latitude, 
      "Longitude" : Longitude, 
      "Extrainformatie" : Extrainformatie 
     ] 
    } 
} 

數據庫結構: Structure

TableviewCell: enter image description here

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
     if segue.identifier == "mySegue" { 
      if let indexPath = self.tableView.indexPathForSelectedRow { 
       let controller = segue.destination as! ExtraViewController 
       let story = posts[indexPath.row] 
       controller.tijd = story["Tijd"] as! String 
      } 
    } 
} 

的錯誤,我得到的是:類型 '後' 沒有下標成員。

在線:controller.tijd = story["Tijd"] as! String

+0

分享你的帖子值屏幕截圖。 – Pushpendra

+0

我已更新 –

+0

你是如何申報你的帖子數組的? :) – Alex

回答

0

試試這個: -

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
     if segue.identifier == "mySegue" { 
     if let indexPath = self.tableView.indexPathForSelectedRow { 
      let controller = segue.destination as! ExtraViewController 
      let story = posts[indexPath.row] 
      print(story.Tijd) 
      controller.tijd = story.Tijd as! String 
     } 
    } 
} 
在ExtraViewController

: -

var tijd:String! 

我覺得你的數組包含Post模型類類型的對象。

+0

它不工作,數據不會去「ExtraViewController」。我不明白爲什麼 –

+0

檢查一次,你沒有在ExtraViewController的tijd中設置任何值。並打印(story.Tijd)來檢查值是否爲空。 – Pushpendra

+0

沒有價值。如果我打印'print(「test \(Tijd)」)'說CONSOL:「test nil」。 –

0

你得到給我們的問題是什麼的提示錯誤:

Type 'Post' has no subscript members 

這裏story(在story = posts[indexPath.row])是Post類型和文章沒有在同級別範圍內定義的標。這就是爲什麼當你試圖寫story["Tijd"]時會拋出一個錯誤。

從我所看到的,我相信你應該做一個可選的類型轉換as? [String : AnyObject]當你收到它的快照,但我不知道你是如何啓動你的快照。