【问题标题】:UIWebView is crashing at the end of loading a page that contains embedded YouTube clips in iOS 4.0xUIWebView 在加载包含 iOS 4.0x 中嵌入的 YouTube 剪辑的页面结束时崩溃
【发布时间】:2010-09-05 16:04:26
【问题描述】:

当我在由模态 UIViewController 管理的 UIWebView 中加载包含嵌入式 YouTube 剪辑的页面时,我会因此堆栈跟踪而崩溃:

操作系统版本:iPhone OS 4.0.2 (8A400) 报告版本:104 异常类型:EXC_BAD_ACCESS (SIGBUS) 异常代码:0x00000000 处的 KERN_PROTECTION_FAILURE 崩溃的线程:0 线程 0 崩溃: 0 YouTube 0x00002bac-[NSData(YTBase64) webSafeBase64Data] + 76 1 YouTube 0x000026aa-[YTDeviceAuthenticator _authenticate2] + 662 2 YouTube 0x00002a54-[YTDeviceAuthenticator connectionDidFinishLoading:] + 504 3 基础 0x0003d422 -[NSURLConnection(NSURLConnectionReallyInternal) sendDidFinishLoading] + 62 4 基础 0x0003d3a4 _NSURLConnectionDidFinishLoading + 72 5 CFNetwork 0x00010e74 URLConnectionClient::_clientDidFinishLoading(URLConnectionClient::ClientConnectionEventQueue*) + 160 6 CFNetwork 0x00004b70 URLConnectionClient::ClientConnectionEventQueue::processAllEventsAndConsumePayload(XConnectionEventInfo*, long) + 96 7 CFNetwork 0x00004e62 URLConnectionClient::ClientConnectionEventQueue::processAllEventsAndConsumePayload(XConnectionEventInfo*, long) + 850 8 CFNetwork 0x00004a60 URLConnectionClient::processEvents() + 64 9 CFNetwork 0x00004a12 URLConnection::multiplexerClientPerform(RunLoopMultiplexer*) + 30 10 CFNetwork 0x00004990 多路复用器源::perform() + 120 11 CFNetwork 0x0000490e MultiplexerSource::_perform(void*) + 2 12 核心基础 0x00071a86 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 6 13 核心基础 0x00073768 __CFRunLoopDoSources0 + 376 14 核心基础 0x00074504 __CFRunLoopRun + 224 15 核心基础 0x0001d8e4 CFRunLoopRunSpecific + 224 16 核心基础 0x0001d7ec CFRunLoopRunInMode + 52 17 图形服务 0x000036e8 GSEventRunModal + 108 18 图形服务 0x00003794 GSEventRun + 56 19 UIKit 0x000062a0-[UIApplication_run] + 396 20 UIKit 0x00004e10 UIApplicationMain + 664 21 MyApp 0x00002e94 主 (main.m:13) 22 MyApp 0x00002e30 开始 + 44

这不限于一个特定的 URL;每当页面包含嵌入的 YouTube 剪辑时,它似乎都会发生,例如 this one

其他网页可以正常加载而不会崩溃。

我什至还没来得及点击实际的 YouTube 剪辑就发生了崩溃;它发生在包含嵌入剪辑的页面完成加载时,在调用 webViewDidFinishLoad: 委托方法之前(如果我设置了委托)。

我删除了所有额外的代码,包括删除所有 UIWebViewDelegate 引用,但它在作为我的应用程序的一部分运行时仍然以相同的方式崩溃。

奇怪的是,当我将代码提取到新应用程序中时,新应用程序运行正常。

我也只在运行 iOS 4.02 的 iPhone 3GS 和运行 iOS 4.0 的 iPod Touch 上看到这一点。

我确实没有在 iOS 3.1.3 原始 iPhone 上看到此崩溃,我也没有在模拟器上看到崩溃。

感谢您的帮助。

【问题讨论】:

    标签: iphone uiwebview ios4 youtube


    【解决方案1】:

    您的视图控制器(或其他类)是您的UIWebViewUIWebViewDelegate 吗?如果是这样,您能否展示您实现的委托方法的代码?

    【讨论】:

    • 我删除了所有 UIWebViewDelegate 代码,它仍然崩溃;我将编辑我的帖子以明确说明
    • 顺便说一句,你的答案应该是评论
    • @David Jacobson 我试图开始对话以帮助您解决问题。要我删除我的答案吗?
    • 对不起,如果我觉得有点暴躁;我非常感谢您提供帮助,您的评论确实启发了我加强我的问题......但这不是一个答案,并且(以我的拙见)不应该使用答案机制:-)
    【解决方案2】:

    好的,我自己解决了。

    我的代码中有一个NSData 类别,用于定义该方法:

    - (NSString*)base64Encoding
    

    不幸的是,iOS 4 中的 YouTube 插件似乎使用了 NSData 的隐藏方法(属于某个类别?):

    - (NSData*)base64Encoding
    

    不用说,我的类别覆盖了这个方法,导致了问题。

    【讨论】:

      猜你喜欢
      • 2012-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-02
      • 2017-09-24
      相关资源
      最近更新 更多