我已经在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'
请帮我解决这个问题,并学习新的东西。
此致
答案 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。