【问题标题】:Automatically delete data from Firebase Database自动从 Firebase 数据库中删除数据
【发布时间】:2019-03-18 06:38:23
【问题描述】:

我看到了一些其他问题,但我无法让它发挥作用。我有一个用 swift 编码的 Mac 应用程序,它有一个 Firebase 登录,但用户键入了一个存储在 Firebase 上的密钥,当用户成功使用它时,有没有办法自动删除该密钥?

这是我的数据库。

这是当前使用的代码。

import Cocoa
import FirebaseAuth
import FirebaseDatabase

class LoginViewController: NSViewController {

    @IBOutlet weak var textUsername: NSTextField!
    @IBOutlet weak var textPassword: NSSecureTextFieldCell!
    @IBOutlet weak var btnLogin: NSButton!
    var keyArray = \[Int64\]()

    override func viewDidLoad() {
        super.viewDidLoad()

    }
    override func viewWillAppear() {
    }
    func getLoginState() -> Bool{

        let state = UserDefaults.standard.bool(forKey: "isRegistered")
        if (state) {
            return true
        } else {
            return false
        }

    }
    override func viewDidAppear() {

        let state = self.getLoginState()
        if (state){
            self.performSegue(withIdentifier: NSStoryboardSegue.Identifier(rawValue: "loginsegue"), sender: nil)
            self.view.window?.close()
        }

        var ref: DatabaseReference!
        ref = Database.database().reference()
        let keyRef = ref.child("key1")

        keyRef.observe(DataEventType.childAdded, with: { (snapshot) in
            //    let postDict = snapshot.value as? \[String : AnyObject\] ?? \[:\]
            let keyStr = snapshot.value as? Int64
            if let actualPost = keyStr{
                self.keyArray.append(actualPost)
            }
        })
    }

    @IBAction override func dismissViewController(_ viewController: NSViewController) {
        dismiss(self)
    }
    @IBAction func close(sender: AnyObject) {
        self.view.window?.close()
    }
    @IBAction func onSignup(_ sender: Any) {
//        self.performSegue(withIdentifier: NSStoryboardSegue.Identifier(rawValue: "gotosignup"), sender: sender)
//        self.view.window?.close()

    }
    func dialogOK(question: String, text: String) -> Void {
        let alert: NSAlert = NSAlert()
        alert.messageText = question
        alert.informativeText = text
        alert.alertStyle = NSAlert.Style.warning
        alert.addButton(withTitle: "OK")
        alert.runModal()
    }

    @IBAction func onLogin(_ sender: Any) {
        //self.btnLogin.isEnabled = false
        var isKey = false
        if (!self.textUsername.stringValue.isEmpty) {
            for key in keyArray{
                if(Int64(self.textUsername.stringValue)! == key)
                {
                    UserDefaults.standard.set(true, forKey:"isRegistered")

                    self.performSegue(withIdentifier: NSStoryboardSegue.Identifier(rawValue: "loginsegue"), sender: nil)
                    self.view.window?.close()
                    isKey = true
                }
            }
            if (!isKey){
                self.dialogOK(question: "Error", text: "Invalid Key")
            }
        } else {
            self.dialogOK(question: "Error", text: "Please Input Key")
        }

    }
}

【问题讨论】:

  • 您熟悉云功能吗?所以我可以写一个答案
  • 不:/我不擅长编码,我花钱请人为我创建了这个。
  • 酷。我们可以将此对话转移到Skype吗? (rawandahmad10@outlook.com) 我相信我会有所帮助
  • Firebase 本身与 macOS 不兼容 - API 仅适用于 iOS。也许它是第三方库?你能详细说明一下吗?删除密钥非常简单,但您能否提供更多关于您如何知道用户使用密钥的详细信息?例如他们输入它,它在什么时候被认为是使用的?

标签: swift xcode firebase firebase-realtime-database


【解决方案1】:

您不能像这样对数据库进行排序并期望有一个工作代码,即使有。会造成乱码:

你需要:

  • 对数据库进行排序,如 [1220:0]。首先是关键。 0 & 1 作为是否使用的指标。
  • 一旦用户点击onLogin(),您需要将使用的键值设置为1
  • 设置 Cloud Functions 以检查使用的密钥是否等于 1,如果是。然后取出钥匙。

做剩下的工作。

帮助您入门的相关文章:

【讨论】:

  • 感谢您尝试回答。但是,从 Firebase 中删除密钥需要付出很多努力。如果您知道要删除的密钥,这实际上是一行代码;在 Firebase 中,将任何键的值设置为 NSNull() 将删除该键,或者您可以只使用内置函数。所以不是 swifty refToRemove.setValue(NSNull()) 或者只是 refToRemove.removeValue()。如果您不知道键,您可以查询值(返回键),然后将其删除。
  • @Jay。我们通过 TeamViewer 花了 4 个小时,我终于能够解决他的问题。这只是未来时代的答案
猜你喜欢
  • 2021-05-08
  • 1970-01-01
  • 2019-04-01
  • 2019-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-12
相关资源
最近更新 更多