Swift NSDictionary值即使在检查值存在后也返回nil

时间:2018-12-08 00:57:36

标签: ios swift nsdictionary

我不确定为什么我将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)
}

1 个答案:

答案 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()之前已执行。