等待1-2秒以从Firebase提取数据,然后再显示数据(IOS)

时间:2019-08-15 06:54:48

标签: swift firebase firebase-realtime-database

我创建了具有用户信息页面的应用程序,并且我正在使用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)
        }
    }

1 个答案:

答案 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
    }