win*_*ton 2 ios firebase swift firebase-realtime-database swift3
当我在Firebase中创建对象时,我使用childByAutoId.我以后如何更新这些特定对象?我无法获得关键Firebase自动更新的价值.Snapshot.key只返回"用户".这是我的JSON结构:
{
"users" : {
"-KQaU9lVcUYzIo52LgmN" : {
"device" : "e456f740-023e-440a"
"name: "Test"
}
},
Run Code Online (Sandbox Code Playgroud)
我怎样才能拿到-KQaU9lVcUYzIo52LgmN钥匙?我想更新设备子.这是我到目前为止所拥有的.它目前使用单个子项创建一个完全独立的快照.
self.rootRef.child("users").queryOrdered(byChild: "name").queryEqual(toValue: self.currentUser).observeSingleEvent(of: .value, with: { (snapshot) in
let key = self.rootRef.child("users").childByAutoId().key
let childValues = ["device": device]
self.rootRef.child("users").child(key).updateChildValues(childValues)
Run Code Online (Sandbox Code Playgroud)
编辑:设备是代码中进一步设置的字符串.未在此范围内定义(以便更容易阅读此问题).
当您获得Snapshot.key时,它将返回"users",因为这是您的快照的总体密钥.快照中"用户"内的所有内容都被视为值.
您需要迭代子图层以挖掘"设备".
试试这个:
rootRef.child("users").observeSingleEventOfType(.Value, withBlock: { (snapshot) in
if let result = snapshot.children.allObjects as? [FIRDataSnapshot] {
for child in result {
var userKey = child.key as! String
if(userKey == userKeyYouWantToUpdateDeviceFor){
rootRef.child("users").child(userKey).child("device").setValue(device)
}
}
}
})
Run Code Online (Sandbox Code Playgroud)
此代码将执行以下操作:
'users').'result'."-KQaU9lVcUYzIo52LgmN",它将在您发布的示例代码的第一次迭代中找到它).rootRef.child("users").child(userKey).child("device").setValue(device).当然,您需要在制作用户密钥时存储它们.您可以在设备上使用SharedPreferences,但如果它因任何原因被清除,那么该数据将只是坐在那里.您也可以将它存储在应用程序的内部存储中,但我会使用SharedPreferences.
希望这可以帮助!
| 归档时间: |
|
| 查看次数: |
2643 次 |
| 最近记录: |