【问题标题】:Self controller nil webview自我控制器 nil webview
【发布时间】:2017-05-19 10:51:42
【问题描述】:

我对 Swift 开发或 iOS 开发还很陌生。 我正在制作一个应用程序,该应用程序主要显示具有默认 URL 的 webview,并设置了 firebase,以便发送带有 URL 的通知以更改该 webview。

到目前为止,我已经做到了:

  • 使用 url 传递的密钥通过 firebase 成功接收通知;
  • 在用户忘记打开 wifi 时使用 Reachability 显示警报;
  • progressIndicator 的使用

这一切都很顺利,除了 webView url 的变化。

这是我的 viewDidAppear

class ViewController: UIViewController, UIWebViewDelegate {

@IBOutlet var webView: UIWebView!
@IBOutlet weak var progressIndicator: UIActivityIndicatorView!
@IBOutlet weak var fakeLogo: UIImageView!

let reachability = Reachability()!

override func viewDidLoad() {
    super.viewDidLoad()
}

override func viewDidAppear(_ animated: Bool){

    if reachability.isReachable {
        if reachability.isReachableViaWiFi {
            print("Reachable via WiFi")
        } else {
            print("Reachable via Cellular")
        }

        let myUrl = NSURL(string:"https://www.btp.pt")
        let myRequest = NSURLRequest(url: myUrl! as URL);

        webView.delegate = self
        webView.loadRequest(myRequest as URLRequest)

    } else {
        //print("Network not reachable")
        let alert = showNetworkDialogHelper()
        alert.showNetworkDialog(fromController: self)
    }

}

这是我的 changeUrl 函数,也在 ViewController 中

    func changeWebviewURL(url: String) {
    print("changeWebviewURL : \(url)")

    //print(self.webView) returns nil and
    //fatal error: unexpectedly found nil while unwrapping an Optional value

    let stringUrl = url
    let requestUrl = URL(string: stringUrl);
    let myRequestUrl = URLRequest(url: requestUrl! as URL);
    self.webView!.loadRequest(myRequestUrl)

}

self.webView 在此函数中的简单打印返回零。这就是我一直试图克服但无法克服的问题。

你能帮帮我吗?

【问题讨论】:

  • 你检查 requestUrl 是否为零?
  • 您好,感谢您的帮助。是的,我做到了,但错误甚至在此之前就出现了。即使我没有声明最后 4 行,错误仍然存​​在。
  • WebView 是在 Storyboard 中还是您以编程方式创建它?
  • @Rishab 是的,它在 Storyboard 中。我已经更新了上面的代码。
  • 尝试让 webView 属性变得更强大。

标签: ios swift firebase webview firebase-cloud-messaging


【解决方案1】:

这里是一些针对 Swift 3 更新并经过测试的 ViewController 代码。我省略了 Reachability 变量,因为这可能是问题的原因,并且在问题中未定义。

您会注意到我在情节提要的视图中添加了一个按钮,其中包含一个更改 webView 指向的 URL 的操作。

class ViewController: UIViewController, UIWebViewDelegate {

   @IBOutlet weak var webView: UIWebView!

   @IBAction func buttonAction(_ sender: Any) {
       self.changeWebviewURL(url: "http://www.apple.com")
   }

   override func viewDidLoad() {
       super.viewDidLoad()

       let url = URL(string: "https://www.google.com")
       let request = URLRequest(url: url!)
       self.webView.loadRequest(request)
       self.webView.delegate = self
   }

   func changeWebviewURL(url: String) {
       print("changeWebviewURL : \(url)")

       let myUrl = URL(string: url)
       let request = URLRequest(url: myUrl!)
       self.webView.loadRequest(request)
       print(self.webView)
   }

   override func didReceiveMemoryWarning() {
       super.didReceiveMemoryWarning()
       // Dispose of any resources that can be recreated.
   }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-22
    相关资源
    最近更新 更多