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

最佳答案

这是因为您正在异步地从数据库中获取数据(这是正确的方法),但是您正在同步地调用printUserData。因此,在获取和设置实际数据之前会调用printUserData()

运行此代码时,请注意,您在printUserData()调用之前看到print(self.employeeUserData)中的打印已执行。

10-08 03:49