2017-10-04 62 views
1

Firebase Hierachy访问的火力地堡(SWIFT)的具体关键

Simulater Screen

我试图火力点内更新子值。 用户首先会创建一个新的订单,它会创建两个节点,一个在主要订单部分,另一个在用户下面,以保持清洁记录。这似乎工作,但我努力更新值

然后,当他在窗体上,并进行更新,我希望firebase在firebase上同时更新。我如何访问该特定的密钥,因为当我尝试使用观察方法时,似乎没有任何工作适用于我。

什么是最好的方式来访问表单所在的关键并更新值?

回答

1

这是如何在火力地堡更新值:

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 
+0

嗨,伙伴,感谢您的回复,让我今天实施这个并回来给你。你可以让我知道如何访问“孩子(”specificKeyYouWantToEdit“)”部分,因为这是我正在努力挑选关键时,我在VC接受订单。再次感谢您的洞察力。 –

+0

当你上传这个let key = ref.child(“COrders”)。childByAutoId()。key时,你可以得到密钥,问题在于你的数据是如何存储的。如果您有用户,您希望能够直接获得所有订单或至少部分订单。在用户的uid下使用autoid存储订单,然后获取部分或全部这些密钥。当你循环一个快照时,你可以得到这样的关键:对于snap.children中的孩子{child} = child作为? DataSnapshot if let key = child?.key { // do something } } – DoesData

+0

Thanks mate!这将帮助堆......非常感谢你 –

0

万一你还在寻找答案。

问题1的答案。 你需要更新用户的订单价值,如果它成功,那么从那里取得父键(在你的情况下,它的自动识别码),并使用这个键,在“Corders”中更新。 这里是习题#2的代码

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) 
    } 
} 

,因为你写的“访问密钥的形式是”。对于每个表单数据,存储您在前面步骤中从Firebase获得的关键字。并使用此密钥进行更新。