iOS WKWebView.scrollView委托导致BAD_ACCESS

时间:2016-08-03 02:54:44

标签: ios fixed

我的viewController有一个包含WKWebView的UIView属性。我将WKWebView scrollView委托设置为我的viewController,它是我的UIView子类的公共函数,并在我的viewController中调用。

问题是,当我致电[viewController popViewControllerAnimated]时,它会在[UIScrollView setDelegate:]上崩溃。 我已在viewController' dealloc 中添加viewController.UIView.WKWebView.scrollView.delegate = nil;来解决此问题。

但为什么呢? WKWebView的dealloc是在viewController的dealloc之后,我想viewController设置为nil,WKWebView中的dealloc会将其委托更新为nil然后导致BAD_ACCESS?但是为什么dealloc会明确调用setDelegate ???

2 个答案:

答案 0 :(得分:3)

在WKWebView的类似情况下,我将委托给自己分配了类似的问题。实现deinit为我解决了:

deinit {
    webView.scrollView.delegate = nil
}

答案 1 :(得分:0)

对于ObjC,在dealloc中将scrollView委托设置为nil仍然会导致崩溃。 必须在didMoveToSuperview

中取消代表
- (void)didMoveToSuperview {
    if (self.superview == nil) {
        self.scrollView.delegate = nil;
    }
}

这些线程帮助了我

https://github.com/readium/r2-navigator-swift/pull/4

https://bugs.webkit.org/show_bug.cgi?id=159980