我不确定为什么我将Firebase快照分配给它并看到值存在后,即使在打印“ employeeUserData”后,我的NSDictionary值仍返回nil。当我运行应用程序以测试是否可以从NSDictionary中提取字符串时,它表示这是一个nil值。我以前使用过此代码,并且此方法已起作用,不确定为什么突然不起作用并返回nil,是的,这是编码,这种事情一直在发生,大声笑着,只是想了解为什么这个特殊问题是发生。谢谢。
let employeeUid = Auth.auth().currentUser?.uid
var employeeUserData: NSDictionary?
override func viewDidLoad() {
super.viewDidLoad()
Database.database().reference().child("employees").child(employeeUid!).child("Business").observe(DataEventType.value, with: { (snapshot) in
print("VALUE CHANGED IN USER_PROFILES")
self.employeeUserData = snapshot.value as? NSDictionary
//store the key in the users data variable
self.employeeUserData?.setValue(employeeUid, forKey: "uid")
print(self.employeeUserData!)
}) { (error) in
print(error.localizedDescription)
}
printUserData()
}
func printUserData() {
print(self.employeeUserData!["businessuid"] as! String)
}
答案 0 :(得分:3)
这是因为您正在异步地从数据库中获取数据(这是正确的方法),但是您正在同步地调用#standardSQL
SELECT geoNetwork_city,
SUM( totals_transactions) as total_transcations
FROM `project.dataset.tablename`
WHERE geoNetwork_city NOT LIKE 'NEW YORK'
GROUP BY geoNetwork_city
HAVING total_transcations > 30
。因此,printUserData
在获取和设置实际数据之前被调用。
运行此代码时,请注意,您看到printUserData()
中的打印在调用printUserData()
之前已执行。