0

几天来,我一直试图从 firebase 读取我的数据,但没有成功。实际上,它是一组表,也包含表。

此功能是检索主题,同时检索段落

func getSubjects() {
    let subjectRef = database.child("subjects")
    subjectRef.observe(.childAdded, with: { (snapshot) in
        for child in snapshot.children {
            print(snapshot)
             if let snapshot = child as? DataSnapshot,
                let subject = Subject(snapshot.value)
            //subjectList.append(subject)
           // print("Data : \(subject)")
                
        }
    })
}

这是火力基地屏幕

控制台屏幕

在Android上我没有这个问题,但由于我是iOS新手,我很难应对。欢迎任何帮助。谢谢

4

1 回答 1

0

目前,您正在观察数据库的不断变化,它只会在将子/值添加到您当前检查的位置时运行,为此您可能只想检索一个值,并且每次视图被加载,然后它将再次从数据库中获取。它效率更高,成本更低。你可能想要这样的东西:

ref = Database.database().reference()
ref.child("subjects").child("0").child("paragraphs").child("0").observeSingleEvent(of: .value, with: { (snapshot) in
        let value = snapshot.value as? NSDictionary
        let location = value["location"] as? NSDictionary
        let title= value?["title"] as? String ?? ""
        let text = value?["text"] as? String ?? ""
        let latitude = location?["latitude"] as? String ?? ""
        let longitude = location?["longitude "] as? String ?? ""
    }) { (error) in
     print(error.localizedDescription)
}

您认为每个带有节点的子节点都是一个数组或一个 json 对象。NSDictionary如果它们是嵌套的,您可以将它们转换成一个并使用该转换来访问它们内部的值。

如果它们没有嵌套并且与您在数据库 ref 中观看的位置处于同一级别,例如,上面我们正在查看数据库中的主题 > 0 > 段落 > 0 节点。Title 是该节点内的一个值,而不是子节点,因此我们可以通过返回的数据快照从数据库中简单地获取 title 的值。

我建议阅读Docs,它们在使用不同的操作系统/语言时非常好且易于理解。

于 2020-07-09T20:49:17.813 回答