Firebase 中的观察者未在 swift 应用程序中调用
Posted
技术标签:
【中文标题】Firebase 中的观察者未在 swift 应用程序中调用【英文标题】:Observer in Firebase not being called in swift app 【发布时间】:2019-11-17 23:29:29 【问题描述】:我已经编写了一个方法 - checkUserStatus - 在 swift 中检查存储在 firebase 中的用户是“管理员”还是“创建者”。如果是,那么他们可以看到“上传按钮”。该函数在viewDidLoad中调用如下:
override func viewDidLoad()
super.viewDidLoad()
checkUserStatus()
方法如下:
func checkUserStatus()
let currentUserID = Auth.auth().currentUser?.uid
//get the role of the current user to see if they have admin priveleges
let userRef = Database.database().reference().child("users").child(currentUserID!)
userRef.observe(.value, with: (snapshot) in
let dictionary = snapshot.value as! [String: Any]
let role = dictionary["role"] as! String
self.retrievedRole = role
, withCancel: nil)
print("retrieved role is \(retrievedRole)")
//only those users who are admin or creators can see upload button
if (retrievedRole == "admin") || (retrievedRole == "creator")
uploadButton.isHidden = false
else
uploadButton.isHidden = true
但是,当我逐步执行该方法时,我可以看到观察者从未使用过,并直接跳转到指示检索到的Role 变量为空的“打印”行。因此,该按钮始终处于隐藏状态。我错过了什么没有使用观察者?感谢任何建议。
retrieveRole 的变量在 viewController 的顶部声明如下:
var retrievedRole = ""
【问题讨论】:
【参考方案1】:你需要在回调中嵌入检查块,因为它的调用是异步的
userRef.observe(.value, with: (snapshot) in
let dictionary = snapshot.value as! [String: Any]
let role = dictionary["role"] as! String
self.retrievedRole = role
print("retrieved role is \(retrievedRole)")
//only those users who are admin or creators can see upload button
if retrievedRole == "admin" || retrievedRole == "creator"
uploadButton.isHidden = false
else
uploadButton.isHidden = true
, withCancel: nil)
【讨论】:
是的,就是这样。非常感谢。以上是关于Firebase 中的观察者未在 swift 应用程序中调用的主要内容,如果未能解决你的问题,请参考以下文章
Swift 3 Firebase 远程通知未在 TestFlight 上显示
在 Swift 中的 Firebase 实时数据库观察方法中具有异步函数的 DispatchGroup