如何修复UIWebView中的WebCore崩溃?

6

我的应用程序在 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 崩溃吗?


也许这个相关:https://bugs.webkit.org/show_bug.cgi?id=133366 也许不相关。 - nyi
1
@Erich,我也遇到了像WebCore :: WebVideoFullscreenModelMediaElement :: updateForEventName这样的问题,在iOs8中发生了崩溃问题。如果您解决了此问题,请发送答案或建议给我。 - Nikunj Jadav
2
同时也遇到了许多奇怪的崩溃问题。 - Benjamin Oman
我猜你已经尝试过在导航完成时停止加载并加载空页面了吧?那么唯一合理的建议就是添加更多的分析,这样你就可以尝试获取更多关于崩溃的上下文信息,或者使用类似http://appsee.com的服务,也许这会为你的用户行为带来一些启示。虽然像这样的崩溃通常是死路一条,直到苹果在下一个版本中更新WebKit。 - Sash Zats
1个回答

2

你是否在某些地方使用了带有委托的UIWebView实例?你是否尝试在视图控制器或视图的dealloc方法中将委托设置为nil?

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

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

是的,正如我所提到的,我正在将委托设置为nil。 - Erich
嗨,Erich,如果你知道你要加载的url或文件,那么最好的方法是重现。如果它是一个url,请将响应保存为文件并尝试渲染,使用文件将更容易减少和检查任何html语法。如果您可以提供文件或url,我也可以做到:)。我曾经在使用复杂的HTML页面时遇到过这些崩溃。 - southfox
@property (nullable, nonatomic, assign) id <UIWebViewDelegate> delegate;苹果将此“delegate”设置为“assign”(而不是weak),因此可能会导致野指针问题。 iOS 13 SDK仍然存在此问题。 - Franz Wang

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接