致命错误:在使用Web视图展开Optional值时意外发现nil

时间:2016-07-27 14:30:10

标签: ios swift uiwebview

我有一个名为productView.swift的类,下面带有以下命令,可以在webView中加载一个网站:

 webView.delegate = self

 func loadRequest(){
   webView?.loadRequest(NSURLRequest(URL: NSURL(string: "http://stackoverflow.com")!))
 }

当我给他打电话时,这段代码效果很好!问题是我有一个UITableView类有一个菜单(侧栏菜单)当我在该表中选择一行时,我在UITableView类中使用此代码调用该函数loadRequest()

productView().loadMenuItem()

我在productView类中收到响应,但当他尝试加载URL时,我收到以下消息:

fatal error: unexpectedly found nil while unwrapping an Optional value
(lldb) 

我如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

当您尝试将其转换为NSURL时,loadMenuItem()内部发生的任何内容都具有nil值。尝试这样的事情:

func loadMenuItem() {
    if let url = NSURL(string: "http://MenuItemURLString),
        let urlRequest = NSURLRequest(URL: url) {
        webView?.loadRequest(urlRequest)
    }
}

这至少应该告诉你你的nil可选

答案 1 :(得分:1)

首先,类名应以大写字母开头!

所以,问题是你正在调用这样的ViewController

productView()

这会创建一个新的类实例(ViewController),但这不是初始化控制器的方法,因为这样做会创建一个控制器的空实例。相反,你必须在故事板中寻找它:

if let storyboard = self.storyboard {
    let controller = storyboard.instantiateViewControllerWithIdentifier("ProductViewController")
    controller.methodFromController()
}

然后你打电话给你的功能。

我建议您使用可选包装来检查可能的错误:

func loadRequest() {
    if let url = NSURL(string: "http://stackoverflow.com"), let request = NSURLRequest(URL: url), webView = self.webView {
        webView.loadRequest(request)
    }
}