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; } }
这些线程帮助了我