访问Firebase上的特定密钥(Swift)

时间:2017-10-04 12:19:58

标签: ios swift firebase

Firebase Hierachy

Simulater Screen

我正在尝试更新firebase中的子值。 用户首先会创建一个新订单,它会创建两个节点,一个在主订单部分,第二个在用户下面,以保持清洁记录。这似乎有效,但我正在努力更新值

然后当他在表单上并进行更新时,我希望firebase在firebase上同时更新。当我尝试使用observe方法时,如何访问该特定键,因为似乎没有任何效果。

访问表单所在的密钥并更新值的最佳方法是什么?

2 个答案:

答案 0 :(得分:1)

这是您在Firebase中更新值的方法:

func updateDatabaseForEdits() {

    let updates : [AnyHashable: Any] = ["variableName": value,
                                            "variableName2": value]

    ref.child("COrders").child("specificKeyYouWantToEdit").updateChildValues(updates, withCompletionBlock: { (error, success) in
        if error != nil {
            // upload failed      
            return
        }
        else {
            // upload worked
            // update your locally stored values
        }
    })
}

您的应用程序还有其他问题。具体来说,您如何存储数据。您如何知道要访问哪个密钥?我建议您将数据存储更新为:

desikhanapeena {
    COrder {
        key123 {
            orderInformation
        }
    }

    UserOrders {
        uid {
            key123
                orderInformation
        }
    }
}

如果您有任何疑问,请与我们联系:

如果你想从快照中获取密钥,你可以这样做:

for child in snap.children {
    let child = child as? DataSnapshot
        if let key = child?.key {
           // print(key)
        }
}

如果您想在上传之前获取密钥,可以这样做:

 let key = ref.child("COrders").childByAutoId().key

答案 1 :(得分:0)

万一你还在寻找答案。

回答问题#1。 您需要更新用户的订单值,如果成功,则从那里获取父密钥(在您的情况下,其AutoID),并使用此密钥更新" Corders"。 这是代码

func updateBothValue(){
    let value = ["key":"data","key1": "data2"]
    REF.child("Users").child(UID).child("UserCorder").childByAutoId().setValue(value){
        error, ref in
        guard error == nil else { return }
        let key = ref.key
        REF.child("Coorders").child(key).setvalue(value)
    }
}

对于Prob#2,正如您所写的那样#34;访问该表格所在的密钥"。对于每个表单数据,存储在前面的步骤中从firebase获得的密钥。并使用此密钥进行更新。