【发布时间】:2019-04-29 17:10:00
【问题描述】:
我正在构建一个使用 webView 和 Firebase 作为数据库的应用程序。应该用于加载 webView 的 url 应该来自数据库。
我已经正确实现了webView 和 Firebase,但问题是我的 webView 没有加载数据库中的 url,而是 var 声明中声明的 url。
似乎 viewDidLoad 在 Database Observe 方法中的闭包之前优先调用方法 webView 加载
如果我查看控制台,我可以清楚地看到一切正常,但是应该用于加载 webview 的 url 是在 webview 加载之后从数据库中检索的......这应该在给定之前完成我把retrieve方法放在BEFORE...
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)
}
}
在控制台中我可以看到在 nextUrl 之前打印了“webview is about to load”...这对我来说很奇怪
【问题讨论】:
-
在 Firebase 中,数据库观察方法是异步的。所以;
print (nextUrl)在print ("webview is about to load")之后调用。
标签: ios swift firebase-realtime-database webview wkwebview