【发布时间】:2016-02-14 23:37:16
【问题描述】:
我对此感到非常沮丧,希望遇到类似问题的任何人都可以提供帮助。当前项目使用 Swift 2、iOS9 和 XCode 7.2。我有 ViewConroller 并尝试添加 UIWebView 或 WKWebview 作为子视图,但是,UIWebView 使应用程序崩溃,而我的 WKWebview 没有加载 URL,并且没有调用任何 WKNavigationDelegate 方法。
- 首先尝试使用UIWebView,应用程序崩溃UIWebView init with frame,错误'EXC_BAD_ACCESS'。如果我在 nib 中添加 webview,则在尝试向 viewcrontroller 显示相同的错误时,整个应用程序会崩溃。
``
import UIKit
import WebKit
class TestViewController: UIViewController, UIWebViewDelegate {
@IBOutlet weak var placeholderView: UIView!
override func viewDidLoad() {
super.viewDidLoad()
let webV:UIWebView = UIWebView(frame: CGRectMake(0, 0, placeholderView.bounds.width, placeholderView.bounds.height))
webV.loadRequest(NSURLRequest(URL: NSURL(string: "https://www.google.com")))
webV.delegate = self;
self.view.addSubview(webV)
}
}
``
- 改用 WKWebview,这解决了崩溃问题,但是,它只显示一个空白视图,并且没有调用任何 WKNavigationDelegate 方法
``
import UIKit
import WebKit
class TestViewController: UIViewController, WKNavigationDelegate {
@IBOutlet weak var placeholderView: UIView!
override func viewDidLoad() {
super.viewDidLoad()
let preferences = WKPreferences()
preferences.javaScriptEnabled = false
let webcon = WKWebViewConfiguration()
webcon.preferences = preferences
let webView: WKWebView = WKWebView(frame: CGRectMake(0, 0, placeholderView.bounds.width, placeholderView.bounds.height), configuration: webcon)
webView.navigationDelegate = self
let url = NSURL(string: "https://www.google.com")!
placeholderView.addSubview(webView)
placeholderView.bringSubviewToFront(webView)
webView.loadRequest(NSURLRequest(URL: url))
}
func webView(webView: WKWebView, didStartProvisionalNavigation navigation: WKNavigation!) {
NSLog("Webview started Loading")
}
func webView(webView: WKWebView, decidePolicyForNavigationAction navigationAction: WKNavigationAction, decisionHandler: (WKNavigationActionPolicy) -> Void) {
NSLog("%@", navigationAction.request.URL!)
}
func webView(webView: WKWebView, didFinishNavigation navigation: WKNavigation!) {
print("\nWebview did finish load \(webView.request)", terminator: "")
}
}
``
我已经将 WebKit 导入到框架中,并且添加的应用程序允许任意加载到我的 info.plist。
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
【问题讨论】:
-
UIWebView崩溃的原因几乎可以肯定是因为delegate被设置为一个不存在的对象。我猜WKWebView委托方法没有被调用,因为你没有设置navigationDelegate属性(或者你做了,但是你设置它的对象被释放了。) -
天啊,没关系,非常感谢,太愚蠢了,但很高兴我问了。 @AaronBrager