swift - 在数据显示之前等待 1-2 秒从 Firebase 获取数据(IOS)
问题描述
我创建了具有用户信息页面的应用程序,并且我正在使用 Firebase 实时数据库来检索数据。我检索了所有数据,但我必须等待 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)
}
}
解决方案
在类之外创建全局变量。如下更改 ViewController。注意:我看不到您在哪里定义 ref。
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
}
推荐阅读
- php - 使用 PHP,如何从 HTML 表中的相应行获取包含访问 ID 的元素?
- python - 如何从整个 json 响应 api 调用中获取特定项目
- ajax - ajax 不从 json 检索数据
- android - 血氧水平spo2传感器
- c - 在 C 中使用 Makefile (make: *** No rule to make target .. 需要 ... Stop
- libreoffice-calc - LibreCalc 的 StarBasic 宏中的换行符“_”在带引号的字符串中不起作用
- reactjs - 未找到模块:无法在“A:\react\react-app\src”中解决“firebase”
- mqtt - MQTT Mosquitto:有没有办法在将主题发布的数据发送给所有订阅者之前对其进行预处理?(即中间件)
- mongodb - 酿造服务。无法启动服务。得到“引导失败:5:输入/输出错误”
- python - 导入运算符时出错 (Python)