UIWebView在加载包含iOS 4.0x中嵌入的YouTube剪辑的页面结束时崩溃

时间:2010-09-05 16:04:27

标签: iphone uiwebview ios4 youtube

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

OS Version:      iPhone OS 4.0.2 (8A400)
Report Version:  104

Exception Type:  EXC_BAD_ACCESS (SIGBUS)
Exception Codes: KERN_PROTECTION_FAILURE at 0x00000000
Crashed Thread:  0

Thread 0 Crashed:
0   YouTube                         0x00002bac -[NSData(YTBase64) webSafeBase64Data] + 76
1   YouTube                         0x000026aa -[YTDeviceAuthenticator _authenticate2] + 662
2   YouTube                         0x00002a54 -[YTDeviceAuthenticator connectionDidFinishLoading:] + 504
3   Foundation                      0x0003d422 -[NSURLConnection(NSURLConnectionReallyInternal) sendDidFinishLoading] + 62
4   Foundation                      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 MultiplexerSource::perform() + 120
11  CFNetwork                       0x0000490e MultiplexerSource::_perform(void*) + 2
12  CoreFoundation                  0x00071a86 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 6
13  CoreFoundation                  0x00073768 __CFRunLoopDoSources0 + 376
14  CoreFoundation                  0x00074504 __CFRunLoopRun + 224
15  CoreFoundation                  0x0001d8e4 CFRunLoopRunSpecific + 224
16  CoreFoundation                  0x0001d7ec CFRunLoopRunInMode + 52
17  GraphicsServices                0x000036e8 GSEventRunModal + 108
18  GraphicsServices                0x00003794 GSEventRun + 56
19  UIKit                           0x000062a0 -[UIApplication _run] + 396
20  UIKit                           0x00004e10 UIApplicationMain + 664
21  MyApp                           0x00002e94 main (main.m:13)
22  MyApp                           0x00002e30 start + 44

这不仅限于一个特定的URL;只要页面包含嵌入的YouTube剪辑,例如this one

,就会发生这种情况

其他网页可以正常运行而不会崩溃。

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

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

奇怪的是,当我将代码解压缩到一个新的应用程序时,新的应用程序运行正常。

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

在iOS 3.1.3原版iPhone上看到此崩溃,我也没看到模拟器崩溃。

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

您的{1}}视图控制器(或其他类)是UIWebViewDelegate吗?如果是这样,您能否显示您实施的委托方法的代码?

答案 1 :(得分:0)

好的,我自己解决了这个问题。

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

- (NSString*)base64Encoding

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

- (NSData*)base64Encoding

毋庸置疑,我的类别覆盖了这种方法,导致问题。