【发布时间】:2019-08-15 06:54:48
【问题描述】:
我创建了具有用户信息页面的应用程序,并且我正在使用 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)
}
}
【问题讨论】:
-
如果这是应用用户的信息,你能不能早一点得到这个值(snapshot.value),例如在appDidFinishLaunching中,存储这个值。并使用它在 viewDidLoad 中加载 textFields ?
-
@claude31 你有一些例子我应该把代码的哪一部分放在 appDidFinishLaunching 中,以及如何使用它在 viewDidLoad 中加载 textFields?
-
你可以创建一个全局变量 var userDic: NSDictionary?然后,在finishLaunching中,调用修改后的getUserDetails func getUserDetails() { ref = Database.database().reference().child("Users/Sellers/(userID)/user_info/") ref.observeSingleEvent(of: .value, with: { (snapshot) in userDic = snapshot.value as?NSDictionary 在 viewDidLoad 中使用 self.userIDText.text = userDic?["userID"] as?String ?? ""
-
@Thanakorn 为了更清楚,我将在答案部分发布代码,即使我无法测试它
-
我看不到你的问题;您正在尝试从使用网络的远程源获取一些数据,当然您会等待一段时间,每个应用都会这样做,每个应用只会显示进度视图;可能有一个缓存系统来加速你的加载,但你仍然不能指望所有的远程调用都会立即执行
标签: swift firebase firebase-realtime-database