Я читаю данные пользователя при каждом входе в систему.Поскольку у меня есть Firebase AuthListener внутри AppDelegate.swift, представление меняется, как только пользователь вошел в систему.
Проблема в том, что в некоторых случаях представление изменяется быстрее, чем обрабатываются данные, что приводит кэкран без нужных данных.
В прошлом я обошел это, добавив: databaseRef.observeSingleEvent(of: .value, with: { snap in ... })
к коду, который меняет представление:
if user != nil && currentCar == "auto auswählen" {
databaseRef.observeSingleEvent(of: .value, with: { snap in
if user?.isAnonymous == false {
let controller = storyboard.instantiateViewController(withIdentifier: "RootPageViewController") as! RootPageViewController
let vc = storyboard.instantiateViewController(withIdentifier: "ProfileViewController") as! ProfileViewController
vc.readTimeline()
self.window?.rootViewController = controller
self.window?.makeKeyAndVisible()
} else if user?.isAnonymous == true {
let controller = storyboard.instantiateViewController(withIdentifier: "RootPageViewController") as! RootPageViewController
self.window?.rootViewController = controller
self.window?.makeKeyAndVisible()
}
})
Это работало нормально, но теперь, когда ячитать мои данные с помощью цикла for, этого не произойдет, поскольку запрос к базе данных будет завершен раньше, чем цикл for:
databaseRef.child("users").child(uid).observeSingleEvent(of: .value, with: { (snapshot) in
let value = snapshot.value as? NSDictionary
for n in 1...snapshot.childrenCount {
databaseRef.child("users/\(uid)").child(String(n)).observeSingleEvent(of: .value, with: { (snapshot) in
let value = snapshot.value as? NSDictionary
...
}) { (error) in
print(error.localizedDescription)
}
}
}) { (error) in
print(error.localizedDescription)
}
}
Как заставить AppDelegate.swift и AuthListener ждатьпока цикл for не закончится?