具有火力地堡的结构如下:火力地堡独特价值
-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
每一个关键是通过在应用程序上虽然运行设备在本地自动生成(DF2342和AB1232),我想首先生成的关键设备,然后检查该密钥是否已存在于Firebase数据库中。如果存在,请重新生成密钥并重试。在这里,我使用的代码:
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循环一直走下去,并且从来没有从火力回应。对我来说完成这项任务最好的办法是什么?
很难,你的意思是他们是“与人分享的钥匙”? (有点像“访问代码”?) – Fattie
没有简单的方法来确保跨多个子节点的特定属性的唯一值。解决方案是将值作为键存储在二级索引中(实际上只是一个查找列表)。看到这个答案的一个很好的解释:http://stackoverflow.com/questions/35243492/firebase-android-make-username-unique –