【问题标题】:Firebase Data passing between table view and Navigation viewFirebase 数据在表格视图和导航视图之间传递
【发布时间】:2017-09-15 07:20:42
【问题描述】:

我正在尝试从单击的单元格中获取数据到导航控制器。 (然后是标签中的数据。我想要一种额外的信息选项卡)这是我目前得到的:

这是 mij 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
        ]
    }
}

数据库结构:

表格视图单元格:

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

【问题讨论】:

  • 分享您的帖子值屏幕截图。
  • 我已经更新了
  • 你是如何声明你的帖子数组的? :)

标签: swift uitableview firebase firebase-realtime-database


【解决方案1】:

试试这个:-

 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!

我认为您的数组包含后模型类类型对象。

【讨论】:

  • 它不起作用,数据不会转到“ExtraViewController”。我不明白为什么
  • 一旦您没有在 ExtraViewController 的 tijd 中设置任何值,请检查。并且还 print(story.Tijd) 检查值不为空。
  • 没有值。如果我打印print("test \(Tijd)") 说控制台:“test nil”。
  • 你能帮忙吗?
  • 请再次调试,让我知道story.Tijd的价值。
【解决方案2】:

您收到的错误提示我们问题所在:

Type 'Post' has no subscript members

这里story(在story = posts[indexPath.row]中)属于Post类型,而Post在其类范围内没有定义下标。这就是为什么当您尝试编写 story["Tijd"] 时会引发错误。

据我所知,我认为您应该在收到快照时对其进行可选类型转换 as? [String : AnyObject],但我不确定您是如何初始化快照的。

【讨论】:

    猜你喜欢
    • 2023-03-15
    • 1970-01-01
    • 1970-01-01
    • 2014-06-18
    • 1970-01-01
    • 1970-01-01
    • 2018-07-30
    • 2022-01-07
    • 2011-12-07
    相关资源
    最近更新 更多