iOS WKWebView.scrollView委托导致BAD_ACCESS

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

问题是当我调用[viewController popViewControllerAnimated] ,它会在[UIScrollView setDelegate:]上崩溃。 我通过添加viewController.UIView.WKWebView.scrollView.delegate = nil;修复了这个问题viewController.UIView.WKWebView.scrollView.delegate = nil; 在viewController的dealloc中

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

在WKWebView的类似情况下,我在将委托分配给self时遇到了类似的问题。 实施deinit为我解决:

 deinit { webView.scrollView.delegate = nil } 

对于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