在唯一的AutoID

时间:2017-12-30 20:09:50

标签: swift xcode firebase-realtime-database

这是我的第一个问题,我还在学习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 Float:" 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等。

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

感谢您的帮助。

1 个答案:

答案 0 :(得分: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”