【发布时间】:2016-08-09 21:43:49
【问题描述】:
我正在尝试从我的 Firebase 数据库中检查某些节点是否存在,如果不存在,请在数据库中创建新节点。我需要我的方法loadAll() 在它调用创建任何缺失节点autoCheck 的第二种方法之前完全执行。我尝试了一个调度组来执行此操作,但它不起作用,print("Done downloading!") 在完成检查数据库之前被调用。谢谢!!
代码:
func loadAll(){
var deleted_load = false
var poor_load = false
var allLoadDone = false
if let user = FIRAuth.auth()?.currentUser {
let uid = user.uid
let refff = FIRDatabase.database().reference()
let userRef = refff.childByAppendingPath("users/\(uid)")
//When making new fields increase this var
var howmany = 2
var done = 0
var downloadGroup = dispatch_group_create()
dispatch_group_enter(downloadGroup)
userRef.queryOrderedByValue().observeEventType(.ChildAdded, withBlock: { snapshot in
allLoadDone = true
if(!snapshot.exists()){
print("ERR DOES NOT EXCIST")
self.autoCheck(deleted_load, poor_load: poor_load, userRef: userRef, ig: 1)
return
}
if let score = snapshot.value as? Int {
if(snapshot.key=="deleted"){
deleted_load = true
}
if(snapshot.key=="Staff_Poor"){
poor_load = true
}
print("\(snapshot.key) is \(score)")
self.counter.text = String(score)
}
done = done + 1
if(done>=(howmany)){
self.autoCheck(deleted_load, poor_load: poor_load, userRef: userRef, ig: 2)
}
})
dispatch_group_leave(downloadGroup)
dispatch_group_notify(downloadGroup, dispatch_get_main_queue()) { // 2
print("Done downloading!")
}
} else {
print("No user!")
gotoLogin()
}
}
func autoCheck(deleted_load: Bool, poor_load: Bool, userRef: FIRDatabaseReference, ig: Int) -> Bool{
print("ID IS: \(ig)")
var newUserData = ["deleted": 0, "Staff_Poor": 0]
print("deleted_load: \(deleted_load)")
if deleted_load==true{
newUserData.removeValueForKey("deleted")
}
print("poor_load: \(poor_load)")
if poor_load==true{
newUserData.removeValueForKey("Staff_Poor")
}
if(!newUserData.isEmpty){
userRef.updateChildValues(newUserData)
}
return true
}
【问题讨论】:
标签: swift firebase grand-central-dispatch firebase-realtime-database