【问题标题】:How to fix WebCore crashes in UIWebView?如何修复 UIWebView 中的 WebCore 崩溃?
【发布时间】:2014-10-20 01:08:59
【问题描述】:

我的应用在 iOS 7 和 8 中大量使用了UIWebView。我经常收到影响少数与 Web Core 相关的用户的崩溃报告。正如其他答案中所建议的那样,当它的视图控制器消失时,我已经将 webview 委托设置为 nil 。但是,我仍然遇到很多崩溃,例如:

WebCore::SharedBuffer::clear()
WebCore::TimerBase::updateHeapIfNeeded(double)
WebCore::WebVideoFullscreenModelMediaElement::updateForEventName
WebCore::HTMLMediaElement::seekTimerFired
WebCore::EventTarget::fireEventListeners
WebCore::CachedResource::unregisterHandle
WebCore::CSSFontSelector::~CSSFontSelector()
WebCore::MediaQueryMatcher::styleResolverChanged

我有几千个日常用户,但每天可能会发生 5 次崩溃,上面的堆栈跟踪是这样的,所以我永远无法重现。我还能做些什么来防止UIWebView 崩溃?

【问题讨论】:

  • 也许这是相关的:bugs.webkit.org/show_bug.cgi?id=133366也许不是..
  • @Erich 我也面临像 WebCore::WebVideoFullscreenModelMediaElement::updateForEventName 这样的问题 iOs8 中发生崩溃问题。如果你解决了,请给我答案或建议。
  • 也有很多这些奇怪的崩溃。
  • 我猜你已经尝试过在导航完成后停止加载和加载一个空页面?唯一合理的建议是添加更多分析,以便您可以尝试获取更多有关崩溃的上下文或使用类似于appsee.com 的服务,这可能会影响您的用户行为。尽管在 Apple 在下一个版本中更新 WebKit 之前,这样的崩溃通常是死胡同

标签: ios objective-c uiwebview


【解决方案1】:

您是否在某些地方使用带有委托的 UIWebView 实例?您是否尝试在视图控制器或视图的 dealloc 方法中将委托归零?

- (void)dealloc
{
    self.webView.delegate = nil;
}

无论您使用的是 ARC 还是非 ARC,这一点都非常重要。

【讨论】:

  • 是的,如前所述,我正在取消代表
  • 您好 Erich,如果您知道 url,或者您尝试加载的文件,是重现的最佳方式。如果它是一个 url,将响应保存为文件并尝试呈现,使用该文件将更容易减少和检查任何 html 语法。如果您可以提供文件或网址,我也可以这样做:)。我过去使用复杂的 HTML 页面时遇到过这种崩溃。
  • @property (nullable, nonatomic, assign) id <UIWebViewDelegate> delegate; Apple 将此delegate 设置为assign(不弱),因此可能会导致野指针问题。 iOS 13 SDK 还是有这个问题
猜你喜欢
  • 2013-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-20
  • 2018-10-08
  • 2016-01-03
  • 1970-01-01
  • 2019-10-07
相关资源
最近更新 更多