在唯一的AutoID中访问Firebase数据

问题描述 投票:0回答:1

这是我的第一个问题,我还在学习Swift / Xcode / Firebase,所以感谢您的耐心等待。我一直在跟踪StackOverflow并找到了很多答案来帮助解决各种问题,但是对于我已经困扰了2天的问题没有任何意义。

我正在编写一个程序,它将在先前的viewcontroller上拾取的日期和一组用户输入的浮点数从文本字段保存到Firebase数据库,并将每个数据集附加为单独的条目,而不是覆盖以前的数据。使用下面的第一个代码块,我已经解决了这个问题,除非我找不到使用AutoID的方法。这使我在Firebase中有这样的设置,但每个类别中有多个类别和“optionSelected”部分:

  • 程序名 第1类 optionSelected L1cggMnqFqaJf1a7UOv 日期:“21-12-2017” 变量1 Float:“12345” 变量2 Float:“26.51” L1ciVpLq1yXm5khimQC 日期:“30-12-2017” 变量1 Float:“23456” 变量2浮点数:“35.88”

用于保存的代码:

func newWithNewVars() {

    let myDatabase = Database.database().reference().child("Category 1").child(optionSelected)
    let variable1 = textField1.text
    let variable2 = textField2.text
    let variable1Float = (textField1.text! as NSString).floatValue
    let variable2Float = (textField2.text! as NSString).floatValue
    let writeArray = ["Date": textPassedOverDate, "Variable 1 Float": variable1Float, "Variable 2 Float": variable2Float]

    myDatabase.childByAutoId().setValue(gasArray) {
        (error, reference) in
        if error != nil {
            print(error!)
        }
        else {
            print("Message saved successfully!")
        }
    }
}

回忆数据时会出现问题。由于AutoID是唯一的,我无法弄清楚如何更深入地访问数据以进行计算。具体来说,我希望能够创建一个新条目,按下保存数据按钮,并让它找到“optionSelected”部分中的最新条目,这样它就可以进行计算,例如从新变量1中减去旧变量1和这样。

鉴于上面使用的上述描述,布局和代码,什么代码结构将允许我找到最新的日期并访问特定类别和“optionSelected”的AutoID部分内的数据?

谢谢您的帮助。

swift xcode firebase-realtime-database
1个回答
0
投票

你遇到的问题是你正试图深入挖掘,但不能因为你没有持有那个id。当你想要进入JSON树中的列表时,当你没有持有该id进入内部时,你会想要在参考观察中使用.childAdded - 这将被调用多次第1类树内的值:

let reference = Database.database().reference()
reference.child("Category 1").child("optionSelected").observe(.childAdded, with: { (snapshot) in

    let uniqueKey = snapshot.key // IF YOU WANT ACCESS TO THAT UNIQUE ID
    print(uniqueKey)

    guard let dictionary = snapshot.value as? [String: AnyObject] else { return }

    let date = dictionary["date"] as? String
    let variableOne = dictionary["Variable 1 Float"] as? Float
    let variableOne = dictionary["Variable 2 Float"] as? Float

}, withCancel: nil)

您可能还希望避免在数据库密钥中使用空格以避免在不久的将来出现任何问题。我坚持常见的小写下划线练习,例如“category_1”或“variable_2_float”

© www.soinside.com 2019 - 2024. All rights reserved.