应用程序崩溃与WKWebView和UINavigationController

时间:2015-11-21 11:02:29

标签: ios objective-c uinavigationcontroller wkwebview

我正在使用Storyboard构建应用。我也使用UINavigationController。

其中一个视图有一个工具栏,并且有一个barButtonItem,它直接连接到另一个视图作为“show”segue,并且视图被正确显示。

要显示的视图创建WKWebView的实例。在这个视图中,WKWebView工作正常。

但是,当我点击NavigationBar的后退按钮时,应用程序崩溃了,即使我设置了所有异常,我也无法捕捉异常。

在使用WKWebView的视图的viewDidLoad中,

WKWebViewConfiguration *configuration = [[WKWebViewConfiguration alloc] init];
configuration.allowsInlineMediaPlayback = YES;
configuration.allowsAirPlayForMediaPlayback = YES;
configuration.requiresUserActionForMediaPlayback = YES;
configuration.allowsPictureInPictureMediaPlayback = YES;

webView = [[WKWebView alloc] initWithFrame:CGRectZero configuration:configuration];
webView.translatesAutoresizingMaskIntoConstraints = NO;
webView.allowsLinkPreview = YES;
webView.allowsBackForwardNavigationGestures = YES;
[_childView addSubview:webView];

webView.navigationDelegate = self;
webView.UIDelegate = self;
// Autolayout
NSDictionary *views = NSDictionaryOfVariableBindings(webView);
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-0-[webView(>=0)]-0-|" options:0 metrics:nil views:views]];
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-0-[webView(>=0)]-0-|" options:0 metrics:nil views:views]];

// Propertiesの監視
[webView addObserver:self forKeyPath:@"estimatedProgress" options:NSKeyValueObservingOptionNew context:nil];
[webView addObserver:self forKeyPath:@"title" options:NSKeyValueObservingOptionNew context:nil];
[webView addObserver:self forKeyPath:@"loading" options:NSKeyValueObservingOptionNew context:nil];
[webView addObserver:self forKeyPath:@"canGoBack" options:NSKeyValueObservingOptionNew context:nil];
[webView addObserver:self forKeyPath:@"canGoForward" options:NSKeyValueObservingOptionNew context:nil];

我创建了WKWebView的实例。

点击UINavigationController时如何避免崩溃?

提前致谢。

1 个答案:

答案 0 :(得分:0)

WKWebView被解除分配,而键值观察者仍然注册了它,我认为你应该在deinit时删除观察者。如:

deinit 
{
    webview.removeObserver(self, forKeyPath: "estimatedProgress")
}