Firebase iOS-密钥/值对不';t从数据库中物理删除

Firebase iOS-密钥/值对不';t从数据库中物理删除,ios,swift,firebase,firebase-realtime-database,Ios,Swift,Firebase,Firebase Realtime Database,我将所有用户名保存在一个单独的节点中,以便在用户搜索用户名时运行搜索。我从节点中删除了一个名称,例如pizzaMan。问题是,即使它删除了,如果我在我的应用程序中对删除的名称进行搜索,它会说它可用,但当我实际查看数据库时,它显示它仍然存在(这意味着它不应该可用)这怎么可能? @IBAction func deleteUsernameButtonTapped(_ sender: UIButton) { // the user's username is pizzaMan let

我将所有用户名保存在一个单独的节点中,以便在用户搜索用户名时运行搜索。我从节点中删除了一个名称,例如pizzaMan。问题是,即使它删除了,如果我在我的应用程序中对删除的名称进行搜索,它会说它可用,但当我实际查看数据库时,它显示它仍然存在(这意味着它不应该可用)这怎么可能?

@IBAction func deleteUsernameButtonTapped(_ sender: UIButton) {

    // the user's username is pizzaMan
    let username = usernamesRef?.child("pizzaMan")
    userName?.observeSingleEvent(of: .value, with: { (snapshot) in

        if snapshot.exists() {

            let key = snapshot.key

            username?.child(key).removeValue()
            print("username: \(key) has been deleted\n")
        }
    })
}
用户名pizzaMan已被删除,但在数据库中显示它仍然存在


如果我试图获取它,则允许我使用新值写入旧值,但一旦删除,它仍不应显示在数据库中。

如果我理解您的问题,您的问题在于删除函数

让我重申我认为你所说的话。你想让pizzaMan的节点完全移除,是吗?试试这个:

@IBAction func deleteUsernameButtonTapped(_ sender: UIButton) {

    // the user's username is pizzaMan
    if let username = usernamesRef as? DatabaseReference{
         username.child("usernames/pizzaMan").removeValue()
    }
    else{
         print("Errors")
    }

}

这就是您打算做的吗?

删除值后立即尝试删除引用,第二,确实需要在此处执行观察事件吗?是的,您对我打算做的事情的理解是正确的。我会在一个小时左右试一下你的答案,然后再回来。从您的答案来看,问题似乎是由我在删除密钥之前实例化密钥引起的。我希望你的答案行得通,如果不行,我是来帮你的。问题是,据我所知,你的用户名/比萨人/比萨人会因为反应太晚而感到痛心。我试着完全像你张贴,但同样的问题存在的方式,我解释。它移除/删除键/值对,但当我查看数据库时,它就在我面前。然而,当我搜索时,它说它是可用的。顺便说一句,搜索其他任何东西都可以。如果我搜索另一个我没有删除的名字,它会说它不可用,如果我搜索一个不存在的名字,它会说它可用。只有在我删除它之后,问题才会出现。您是否在其他地方设置它?由于您使用的是
observeSingleEvent
,因此不会看到对数据库本地副本的更改(如果有)。您可能需要提供更多的代码。我唯一一次设置它是在用户首次注册并选择用户名时。在他们登录后,vc将被解除分配。我使用单例来管理Firebase中的所有内容,但创建用户名的特定调用应该在释放时销毁。您看到的代码与我使用的代码完全相同。
@IBAction func deleteUsernameButtonTapped(_ sender: UIButton) {

    // the user's username is pizzaMan
    if let username = usernamesRef as? DatabaseReference{
         username.child("usernames/pizzaMan").removeValue()
    }
    else{
         print("Errors")
    }

}