swift - Firebase 独特值(value)

标签 swift firebase firebase-realtime-database

在 Firebase 中具有以下结构:

-events
     -Firebase Push ID for Event 1
         **-key: "DF2342"**
         -name: "Event 1"
         -createdOn : 12/12/12
     -Firebase Push ID for Event 2
         **-key: "AB1232"**
         -name: "Event 1"
         -createdOn : 12/12/12

每个 key 都是由运行应用程序的设备在本地(DF2342 和 AB1232)自动生成的,但我想先在设备上生成 key ,然后检查 key 是否已存在于 firebase 数据库中。如果确实存在,请重新生成 key 并重试。这是我为此使用的代码:

 let boardKey = self.keyGenHelper.generateUniqueKey()
        var validData = false
        while(!validData){
        databaseRef?.child("events").queryOrdered(byChild: "key").queryEqual(toValue: boardKey).observeSingleEvent(of: .childAdded, with: { (snapshot) in
            if !snapshot.exists() {
                let boardIdRef = self.databaseRef!.child("events").childByAutoId()
                boardIdRef.setValue(board.generateDictionary(key: boardKey))
                completion(boardKey, boardIdRef.key)
                validData = true
            }
        }, withCancel: {(error) in
            print(error)
        })
        }

这里的问题是 while 循环一直在进行,并且从未得到 firebase 的响应。完成这项任务的最佳方法是什么?

最佳答案

由于您的应用程序要求您不能使用 childByAutoId ,一种确保生成唯一 ID 的方法是在 firebase 中存储一个仅包含您生成的 ID 的附加表。例如:

"keys": {
  "DF2342": true,
  "AB1232": true,
  ...
}

然后当您生成 key 时,您可以执行如下操作:

let boardKey = self.keyGenHelper.generateUniqueKey()
var validData = false
while(!validData){
// check /keys in the database to see if we've already generated a key of this value
databaseRef?.child("keys").queryEqual(toValue: boardKey).observeSingleEvent(of: .childAdded, with: { (snapshot) in
    if !snapshot.exists() {
        let boardIdRef = self.databaseRef!.child("events").childByAutoId()
        boardIdRef.setValue(board.generateDictionary(key: boardKey))
        completion(boardKey, boardIdRef.key)
        validData = true
    }
}, withCancel: {(error) in
    print(error)
})

您还需要确保将新生成的 key 写入 /keys

关于swift - Firebase 独特值(value),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41317646/

相关文章:

ios - 如何在 swift 2.0 中从 Dict 中删除重复值

javascript - 如何从 firebase 存储 state_changed 事件中获取下载图片 url?

javascript - firebase 在删除之前获取父数据的父数据

ios - Firebase 分页 -Swift 和 iOS。应该什么时候使用?

Firebase 分析调度周期

Firebase 托管 - 通配符重定向

java - 使用 Firebase 将多行写入 Java 中的 CSV 文件

arrays - 通过绑定(bind)使用 NSPredicate 过滤自定义对象数组

Swift:为什么我不能在这里添加 2 个整数?

ios - 删除链接到锻炼的所有数据样本