«Как получить URL-адрес из базы данных Firebase ПЕРЕД загрузкой WebView в Swift?» - PullRequest
1 голос
/ 26 апреля 2019

Я создаю приложение с webView и Firebase в качестве базы данных. URL, который должен использоваться для загрузки webView, должен поступить из базы данных.

Я правильно реализовал webView и Firebase, но проблема в том, что мой webView загружается не с URL из базы данных, а с URL, объявленным в объявлении var.

Похоже, что viewDidLoad в приоритетном порядке вызывает методы webView, загружаемые перед закрытием внутри метода Database Observe

Если я смотрю на консоль, я ясно вижу, что все работает, НО URL, который должен использоваться для загрузки webview, извлекается из базы данных ПОСЛЕ webview загрузки ... это должно быть сделано ДО данного что я поставил метод извлечения ДО ...

class ViewController:  UIViewController {

    var dbRef: DatabaseReference!
    var nextUrl = "https://www.google.co.uk/"

    func retrieveUrl () {
        dbRef = Database.database().reference().child("EXAMPLE")

        dbRef.observe(.value) { (snapshot) in
            let value = snapshot.value as! NSDictionary
            let url = value["url"]!
            self.nextUrl = (url as! String)
            print (nextUrl)
        }
        print ("function observe is called")
    }

    override func viewDidLoad () {
        super.viewDidLoad()
        retrieveUrl()
        print ("webview is about to load")
        let request = URLRequest (url: URL(string: nextUrl)!)
        self.webView.load(request)
        self.webView.addObserver(self, forKeyPath: #keyPath(WKWebView.isLoading), options: .new, context: nil)
    }
}

в консоли я вижу, что "webview собирается загрузить" печатается перед nextUrl ... что очень странно для меня

1 Ответ

0 голосов
/ 26 апреля 2019

Вы должны загрузить webView в обратном вызове обозревателя firebase.

Поскольку вы загружаете webView сразу после сетевого вызова firebase, это похоже на асинхронную работу, поэтому попытка загрузки webView с помощью nextUrl пуста или нет, чтобы предотвратить асинхронный вызовповедение, которое вы должны ждать для nextUrl или вы должны загрузить webView в обратном вызове firebase.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...