2017-09-15 39 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]当你收到它的快照,但我不知道你是如何启动你的快照。

相关问题