我在从数据库中检索值时遇到问题。每当我运行包含“observeSingleEvent”函数的方法时,它就会完全跳过该方法。
我已经三次检查了我的路径。我有一步,“用户”,这不是硬编码,并认为那里可能出错了。我硬编码了 - 块仍然被完全跳过。
这是我的功能:
func retrieveAppState() -> String {
var appState = ""
let user = makeFirebaseString(with: UserDefaults.standard.string(forKey: "User")!)
let userInfoRef = ref.child("users").child(user).child("user-info")
userInfoRef.observeSingleEvent(of: .value, with: { (snapshot) in
let userInfo = snapshot.value as! [String: Any]
let state = userInfo["appState"] as! String
print("App state is: \(state)")
appState = state
})
return appState
}
我尝试了很多不同的变体,例如非常常见的可选绑定。
func retrieveAppState() -> String {
var appState = ""
let user = makeFirebaseString(with: UserDefaults.standard.string(forKey: "User")!)
let userInfoRef = ref.child("users").child(user).child("user-info")
userInfoRef.observeSingleEvent(of: .value, with: { (snapshot) in
let userInfo = snapshot.value as! [String: Any]
if let state = userInfo["appState"] as! String {
appState = state
}
})
return appState
}
该块永远不会被执行。我尝试过使用snapshot.exist()而没有尝试。它从observeSingleEvent行跳转并直接返回到return语句。我知道该函数被调用,我知道ref是正确的,因为它与我在将值写入数据库时使用的相同。
非常感谢任何帮助。我在下面发布了我的JSON结构。这些只是占位符。
{
"users" : {
"Mach" : {
"user-info" : {
"appState" : "Training",
"name" : "mattsh"
}
},
"Mat-XXX@gmail-com" : {
"user-info" : {
"appState" : "Training",
"name" : "Mat XXX"
}
}
}
}
编辑:我在数据库中的规则现在每个人都可以读取和写入数据库,即不需要进行身份验证。 iOS中是否有任何内容阻止此操作,因此我可能需要在应用程序中设置一些内容以获取不安全的HTTP请求的权限?