从Firebase关闭返回数据

时间:2019-04-28 19:16:59

标签: swift firebase firebase-realtime-database closures

到目前为止,一旦用户登录,我就可以填充文本标签。因此,一旦他们这样做,主页上就会显示“ Welcome johndoe”(johndoe是他们注册时使用的用户名)。但是,我也有一个汉堡式样式的表视图,该视图的配置文件信息包含其用户名,位置和配置文件图像。我在用相同的用户名(即johndoe)填充tableview中的用户名时遇到问题。

我尝试使用一个将包含用户名字符串的全局变量,但是我一直得到默认值“ No Name”

<?xml version="1.0"?>

<project name="Phing Build Tests" default="append-custom-path" basedir=".">
    <target name="append-custom-path">
        <property file="prop.properties">
            <filterchain>
                <replaceregexp>
                    <regexp pattern="^(.*)" replace="vendor/project/$1"/>
                </replaceregexp>
            </filterchain>
        </property>
        <echo>${configuration.files.file1.source}</echo>
        <echo>${configuration.files.file2.source}</echo>
    </target>
</project>

通过使用用户名值,我试图将其分配给我的个人资料项表视图:

var username : String = "No Name"

    func getUserName() {

    let databaseRef = Database.database().reference()

    guard let userID = Auth.auth().currentUser?.uid else { return }

    databaseRef.child("users").child(userID).observeSingleEvent(of: .value) { (snapshot) in
        let theUserName = (snapshot.value as! NSDictionary)["nameOfUser"] as! String
        self.username = theUserName
        self.nameOfUserLabel.text! = "Welcome \(self.username)"
        //this prints out the correct label by saying "Welcome johndoe"
    }
    print("The name of the user is: \(self.username)")
    //for example it would print out in the console: "No Name"

}

但是,一旦加载了表格视图,它只会显示“无名称”。目标是拥有与欢迎标题标签上相同的用户名。

感谢您的帮助。谢谢!

1 个答案:

答案 0 :(得分:0)

您无法调用获取名称的方法是异步(Query query = em.createNativeQuery("INSERT INTO Bike (id, name) VALUES (:id , :name);"); em.getTransaction().begin(); query.setParameter("id", "5"); query.setParameter("name", "Harley"); query.executeUpdate(); em.getTransaction().commit(); ),因此请看它执行的真实顺序

observeSingleEvent

在关闭完成后,您总是会看到无名称