我有一个 iPad 应用程序,它在 App Store 中已经存在大约三个月了,我收到了一些我无法弄清楚的奇怪崩溃报告。这些并不是那么频繁,自发布以来大约有 15-20 个实例,但仍然频繁到足以真正让我烦恼。崩溃略有不同(请参阅下面的堆栈跟踪),但由于它们与WebCore
我猜测它们与UIWebView
应用程序中的使用有关,并且可能有一个共同的原因,尽管我不是 100% 肯定的。该应用程序的部署目标是 iOS 6.0,但崩溃出现在 iPad 2、iPad 3 和 iPad Mini 上,仅在 iOS 7 上。
我在应用程序中只有一个地方使用 webview,用于显示来自各种来源的新闻文章网页。我有一个视图控制器,它有一个UIWebView
作为它的视图。这个视图控制器的一个实例存在于整个应用程序中,每次选择一篇新文章时,现有的 webview 都会使用新选择的文章的 url 重新加载。
基于围绕 WebCore 问题的讨论提出的解决方案之一建议在控制器的方法中设置 webviewsdelegate
属性。不幸的是,我认为它不适用于我的情况,因为视图控制器在应用程序的生命周期内不会被释放。
另一个问题可能是不正确的网页在 CSS 中有错误的图像引用(loadPendingImages 崩溃)。不过,我还找不到这样的页面。
另外,我仔细检查并确保在主线程上执行与 webview 相关的操作。nil
dealloc
崩溃是
Exception Type: EXC_BAD_ACCESS
Code: KERN_INVALID_ADDRESS
带有以下堆栈跟踪(此处为完整的)
0 WebCore WebCore::StyleResolver::applyMatchedProperties(WebCore::StyleResolver::MatchResult const&, WebCore::Element const*) + 815
1 WebCore WebCore::StyleResolver::applyMatchedProperties(WebCore::StyleResolver::MatchResult const&, WebCore::Element const*) + 788
2 WebCore WebCore::StyleResolver::styleForElement(WebCore::Element*, WebCore::RenderStyle*, WebCore::StyleSharingBehavior, WebCore::RuleMatchingBehavior, WebCore::RenderRegion*) + 948
3 WebCore WebCore::Document::styleForElementIgnoringPendingStylesheets(WebCore::Element*) + 96
4 WebCore WebCore::Element::computedStyle(WebCore::PseudoId) + 142
5 WebCore WebCore::ComputedStyleExtractor::propertyValue(WebCore::CSSPropertyID, WebCore::EUpdateLayout) const + 458
和
0 WebCore WebCore::StyleResolver::loadPendingImages() + 1153
1 WebCore WebCore::ResourceRequestBase::~ResourceRequestBase() + 104
2 WebCore WebCore::StyleResolver::applyMatchedProperties(WebCore::StyleResolver::MatchResult const&, WebCore::Element const*) + 782
3 WebCore WebCore::StyleResolver::styleForElement(WebCore::Element*, WebCore::RenderStyle*, WebCore::StyleSharingBehavior, WebCore::RuleMatchingBehavior, WebCore::RenderRegion*) + 948
4 WebCore WebCore::Document::styleForElementIgnoringPendingStylesheets(WebCore::Element*) + 96
5 WebCore WebCore::Element::computedStyle(WebCore::PseudoId) + 142
和
0 WebCore WebCore::StyleResolver::adjustRenderStyle(WebCore::RenderStyle*, WebCore::RenderStyle*, WebCore::Element*) + 19
1 WebCore WebCore::StyleResolver::styleForElement(WebCore::Element*, WebCore::RenderStyle*, WebCore::StyleSharingBehavior, WebCore::RuleMatchingBehavior, WebCore::RenderRegion*) + 964
2 WebCore WebCore::Document::styleForElementIgnoringPendingStylesheets(WebCore::Element*) + 96
3 WebCore WebCore::Element::computedStyle(WebCore::PseudoId) + 142
4 WebCore WebCore::ComputedStyleExtractor::propertyValue(WebCore::CSSPropertyID, WebCore::EUpdateLayout) const + 458
5 WebCore WebCore::CSSComputedStyleDeclaration::getPropertyValue(WebCore::CSSPropertyID) const + 42
和
0 WebCore WebCore::TimerBase::heapDeleteMin() + 37
1 WebCore WebCore::ThreadTimers::sharedTimerFiredInternal() + 94
2 WebCore WebCore::ThreadTimers::sharedTimerFiredInternal() + 94
3 WebCore WebCore::timerFired(__CFRunLoopTimer*, void*) + 24
4 CoreFoundation __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ + 14
5 CoreFoundation __CFRunLoopDoTimer + 782
有没有人经历过类似的崩溃?如果是这样:
1. 有没有办法复制它们?
2.如何在不复制它们的情况下调试它们?
3. 哪些修复解决了这些问题?
谢谢!