【问题标题】:iOS WKWebView.scrollView delegate cause BAD_ACCESSiOS WKWebView.scrollView 委托导致 BAD_ACCESS
【发布时间】:2016-08-03 02:54:44
【问题描述】:

我的 viewController 有一个 UIView 属性,其中包含一个 WKWebView。我将 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???

【问题讨论】:

  • 您能提供更多信息吗?你是如何添加你的scrollView 来查看的?有没有强参考?

标签: ios fixed


【解决方案1】:

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

deinit {
    webView.scrollView.delegate = nil
}

【讨论】:

  • 拯救了我的一天 :-) 它在 iOS > 9 上运行,但在 iOS 9 上崩溃。事实证明,Apple 必须在 iOS 10 中修复它,因此委托现在存储得很弱,而不是之前的字符串:-)
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2015-11-18
    • 1970-01-01
    • 1970-01-01
    • 2015-01-07
    • 2015-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多