我创建了具有用户信息页面的应用程序,并且我正在使用Firebase Realtime Database检索数据。我检索了所有数据,但必须等待1-2秒,直到信息显示出来。
我应该怎么做才能解决此问题?
这就是我从Firebase读取数据的方式
var ref: DatabaseReference!
override func viewDidLoad() {
super.viewDidLoad()
getUserDetails()
}
func getUserDetails () {
ref = Database.database().reference().child("Users/Sellers/\(userID)/user_info/")
ref.observeSingleEvent(of: .value, with: { (snapshot) in
let value = snapshot.value as? NSDictionary
self.userIDText.text = value?["userID"] as? String ?? ""
self.userIDText.addTarget(self, action: #selector(self.textFieldDidChange(_:)), for: .editingChanged)
self.changeNameText.text = value?["name"] as? String ?? ""
self.changeNameText.addTarget(self, action: #selector(self.textFieldDidChange(_:)), for: .editingChanged)
self.addressText.text = value?["address"] as? String ?? ""
self.addressText.addTarget(self, action: #selector(self.textFieldDidChange(_:)), for: .editingChanged)
self.emailText.text = value?["email"] as? String ?? ""
self.emailText.addTarget(self, action: #selector(self.textFieldDidChange(_:)), for: .editingChanged)
self.phoneNumberText.text = value?["phone_number"] as? String ?? ""
self.phoneNumberText.addTarget(self, action: #selector(self.textFieldDidChange(_:)), for: .editingChanged)
}) { (error) in
print(error.localizedDescription)
}
}
答案 0 :(得分:0)
在类外部创建全局变量。 如下更改ViewController。 注意:我看不到您在哪里定义参考。
var userDic: NSDictionary?
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
self.userIDText.text = userDic?["userID"] as? String ?? ""
self.userIDText.addTarget(self, action: #selector(self.textFieldDidChange(_:)), for: .editingChanged)
self.changeNameText.text = userDic?["name"] as? String ?? ""
self.changeNameText.addTarget(self, action: #selector(self.textFieldDidChange(_:)), for: .editingChanged)
self.addressText.text = userDic?["address"] as? String ?? ""
self.addressText.addTarget(self, action: #selector(self.textFieldDidChange(_:)), for: .editingChanged)
self.emailText.text = userDic?["email"] as? String ?? ""
self.emailText.addTarget(self, action: #selector(self.textFieldDidChange(_:)), for: .editingChanged)
self.phoneNumberText.text = userDic?["phone_number"] as? String ?? ""
self.phoneNumberText.addTarget(self, action: #selector(self.textFieldDidChange(_:)), for: .editingChanged)
}
}
在AppDelegate中:
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
func getUserDetails () {
ref = Database.database().reference().child("Users/Sellers/\(userID)/user_info/")
ref.observeSingleEvent(of: .value, with: { (snapshot) in
userDic = snapshot.value as? NSDictionary
}) { (error) in
print(error.localizedDescription)
}
}
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
getUserDetails()
return true // Could test if userDic != nil
}