2017-07-25 135 views
0

我的JSON是这样的:火力地堡值获取孩子的名字,将其取下

users 
    username1: "WWOdh96Yr3Qs4N3GWDVq3OlQFfB2" 
    username2: "RJ6PztTLmsg222oUygWHtWpVHdg1" 

我想通过他们的关键是(auth.uid)获得“用户名1”!如果它发现我想删除它,所以删除后它将看起来像这样:

users 
    username2: "RJ6PztTLmsg222oUygWHtWpVHdg1" 

self.ref.child("users").queryOrderedByValue().queryEqual(toValue: user?.uid).observe(.value, with: { snapshot in 

          if snapshot.exists() { 

           print("\(snapshot.value)") 
           snapshot.ref.child(snapshot.value as! String).removeValue() // this deleting every thing which is WRONG! 



          } else{ 

           print("Not found--") 

          } 
          self.ref.removeAllObservers() 
         }) 
        } 

此代码删除用户中的所有内容。我只想删除特定的用户。

回答

2

首先,我的方法是,如果我想在1时刻查询1个值,就像你在做,我做一个observeSingleEvent(这是最好的方法?)。但为了解决你的问题,你忘了添加你的“用户”路径。下面的代码是更安全的使用,因为你强迫展开(这是不推荐这种情况下):

let dataRef = self.ref.child("users") 
dataRef.keepSynced(true) 
     if let usersUID = Auth.auth().currentUser?.uid{ 
    dataRef.child("users").queryOrderedByValue().queryEqual(toValue: usersUID).observeSingleEvent(.value, with: { snapshot in 
     print(snapshot) 
     let values = snapshot.value as? NSDictionary 
     for (key, value) in values{ 
     print(value) // does this print the uid? 
     print(key) // or this one? 

      self.ref.child("users/\(key)").removeValueWithCompletionBlock({ (err, ref) in 
       if err != nil { 
        print(err) 
       } else { 
        print(ref) 
        print("Removed") 
       } 
      }) 
     } 
    }) 
    } 

尝试添加这个,右后打印(快照)

+0

谢谢!但你能告诉我怎么能在这种情况下使用“observeSingleEvent”?编辑你的答案,完整的代码将被赞赏和接受 – Sam

+0

@Sam我更新了它,它应该工作,虽然我没有测试它 –

+0

我感到困惑,如果你能解释发生了什么,请https://i.gyazo.com /15dc03d6245cad3114120a680e422734.png我已经提到照片中发生了什么。任何想法? – Sam