Ios Firebase登录用户在segue之前加载速度不够快

Ios Firebase登录用户在segue之前加载速度不够快,ios,swift,firebase,firebase-realtime-database,Ios,Swift,Firebase,Firebase Realtime Database,我在按这个按钮 override func viewDidLoad() { FIRAuth.auth()?.signIn(withEmail: "hakuna.matata.kitty@gmail.com", password: "password") { (user, error) in // TODO: SET UP A SPINNER ICON print("Logged into hmk") self.perform

我在按这个按钮

override func viewDidLoad() {
    FIRAuth.auth()?.signIn(withEmail: "hakuna.matata.kitty@gmail.com", password: "password") {
        (user, error) in
        // TODO: SET UP A SPINNER ICON
        print("Logged into hmk")
        self.performSegue(withIdentifier: "login", sender: self)
    }
}
如您所见,在回调时,它会重定向到UITableViewController。填充器代码位于UITableViewController的初始值设定项中,闭包中的唯一目的是填充
self.chatsList

有时,每当我测试应用程序时,UITableViewController都是空白的

ref.child("users").child(currentUser.uid).observeSingleEvent(of: .value, with: { (snapshot) in
    guard snapshot.exists() else {
        print("Error: Path not found")
        return
    }

    let value = snapshot.value as? NSDictionary
    // Convert a dict of dicts into an array of dicts
    // You will lose chatID in the process, so be warned
    // Unless you would like to to keep the data in a struct
    for (chatIdKey, secondDict) in value?["chats"] as! [String: NSDictionary] {
        // This only appends metadata for the last chat
        // Does not load every chat message
        self.chatsList.append(Chat(chatId: chatIdKey, targetChat: secondDict))
    }
})
但是当我按下后退键,等待足够长的时间,然后再次登录时,表被正确填充。


如何确保每次都正确加载?我希望回调时的性能检查可以保证我们有一个currentUser…

我认为应该更改您的观察者。我看到此tableview将是一种聊天,因此您可能希望在用户位于该ViewController中时保持引用处于活动状态,这样您就可以在离开视图时手动删除该观察者,而不是使用
observeSingleEvent

另一件事是,当您可能应该观察childAdded时,您正在观察该值,就好像在“chat”视图中添加了任何事件一样,用户将不会收到它

更改下面的行,看看这是否适合您

ref.child("users").child(currentUser.uid).observe(.childAdded, with: { (snapshot) in
希望有帮助