ios - “如何在 Swift 中加载 WebView 之前从 Firebase 数据库中检索 url?”
问题描述
我正在构建一个使用webView
Firebase 作为数据库的应用程序。应该用于加载的 urlwebView
应该来自数据库。
我已经webView
正确实现了 Firebase 和 Firebase,但问题是我的 webView 没有加载数据库中的 url,而是 var 声明中声明的 url。
似乎 viewDidLoad 在关闭 Database Observe 方法之前优先调用方法 webView 加载
如果我查看控制台,我可以清楚地看到一切正常,但是应该用于加载的 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)
}
}
在控制台中,我可以看到在 nextUrl 之前打印了“webview is about to load”……这对我来说很奇怪
解决方案
您应该在 firebase 观察者的回调中加载 webView。
因为你是在firebase网络调用它的异步工作之后立即加载webView,所以webView尝试加载nextUrl是否为空,为了防止类似异步的行为你必须等待nextUrl或者你应该在firebase回调中加载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 ("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)
}
print ("function observe is called")
}
override func viewDidLoad () {
super.viewDidLoad()
retrieveUrl()
推荐阅读
- python - Python:访问特定的子列表元素
- r - 将带有条件的自定义函数传递给 dplyr::mutate
- kubernetes - 如何在 RHEL 机器上的 Kubernetes 集群上识别 Kong 的 IP?
- python - 使用 extend() 时出现意外的“无”
- c++ - std::unordered_map 析构函数不释放内存?
- excel - wordpress首页中导出的excel表中包含的标题菜单
- c# - 忽略 asmx Web 服务中的参数
- c# - IOptions 绑定不适用于嵌套类
- javascript - 递归和异步检查html元素是否存在
- python - 从 Python 中 csv 格式的应用程序输出(exe 文件)中的变量中获取特定值