从UIWebView继承添加我自己的委托会产生致命错误:无法解包Optional.None

时间:2014-08-06 04:06:07

标签: ios uiwebview delegates swift

我已经在Obj-C中编程了几年而且我决定在Swift中创建我的下一个应用程序以获得经验并学习一些新东西。毋庸置疑,我发现一些难以理解的概念,例如可选变量。

目前我正在尝试从UIWebView继承并将我自己的委托添加到我的班级。这是我班级的代码:

@objc protocol WebViewWithGesturesDelegate{    
    @optional func webViewWithGestures(webViewWithGestures: WebViewWithGestures!,         didFailLoadWithError error: NSError!)
}

class WebViewWithGestures: UIWebView, UIWebViewDelegate, UIGestureRecognizerDelegate {
    var errorDelegate : WebViewWithGesturesDelegate?

init(coder aDecoder: NSCoder!)
{        
    super.init(coder: aDecoder)
    self.delegate = self
}

func webView(webView: UIWebView!, didFailLoadWithError error: NSError!){
    errorDelegate?.webViewWithGestures!(self, didFailLoadWithError: error)
}}

然后在我的ViewController中我有这个:

class NewsViewController: UIViewController, WebViewWithGesturesDelegate {    
@IBOutlet var webView : WebViewWithGestures!

override func viewDidLoad() {
    super.viewDidLoad()
    webView!.errorDelegate = self
}}

然而,当我运行代码时,我得到了这个:

  

'致命错误:无法打开Optional.None'

请帮我解决这个问题,并学习新的东西。

此致

2 个答案:

答案 0 :(得分:1)

是编译器还是运行时错误?我得到了它(在Xcode 6 beta 5上)这样:

网络视图:

@objc protocol WebViewWithGesturesDelegate {
    optional func webViewWithGestures(webViewWithGestures: WebViewWithGestures!, didFailLoadWithError error: NSError!)
}

class WebViewWithGestures: UIWebView, UIWebViewDelegate {

    var errorDelegate : WebViewWithGesturesDelegate?

    required init(coder aDecoder: NSCoder!)
    {
        super.init(coder: aDecoder)
        self.delegate = self
    }

    func webView(webView: UIWebView!, didFailLoadWithError error: NSError!){
        errorDelegate?.webViewWithGestures!(self, didFailLoadWithError: error)
    }

}

查看控制器:

class ViewController: UIViewController, WebViewWithGesturesDelegate {

    @IBOutlet var webView : WebViewWithGestures?

    override func viewDidLoad() {
        super.viewDidLoad()
        if let unwrappedWebView = webView {
            unwrappedWebView.errorDelegate = self
            let request = NSURLRequest(URL: NSURL.URLWithString("Fail"))
            unwrappedWebView.loadRequest(request)
        } else {
            println("No IBOutlet set")
        }
    }

    func webViewWithGestures(webViewWithGestures: WebViewWithGestures!, didFailLoadWithError error: NSError!) {
        println("delegateCalled");
    }

}

答案 1 :(得分:0)

代码没有任何问题。问题是UIWebView没有连接到ViewController IBOutlet。