具有火力地堡的結構如下:火力地堡獨特價值
-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 –