UIWebView加载html5-Video EXC_BAD_ACCESS崩溃

Flo*_*ian 7 iphone exc-bad-access objective-c uiwebview html5-video

在我们的iPad-App中,我们使用UIWebView从一个域加载不同的站点,其中一些使用hml5-Video加载.没有视频的网站可以完美加载.但是当我加载包含htmlt5-video的网站时,有时我的应用程序在使用EXC_BAD_ACCESS的UIWebView的加载过程中崩溃,有时它不会.每当发生这样的崩溃时,似乎发生在将视频播放器添加到站点中的位置.

我确实从Apple下载了UICatalog-Example,并且确实将WebViewController-Class中的Default-URL更改为包含html5-video的站点的URL.结果相同......有时崩溃有时不会崩溃.

我还在Xcode(基于视图的应用程序 - 用于iPad)上创建了一个新项目,并且只在新的Projects ViewController中添加了一个UIWebView.再次......加载包含html5-video的网站有时会导致崩溃,有时甚至不会.

"新项目"视图控制器代码(实施):

- (void)viewDidLoad {
    [super viewDidLoad];

    self.myWebView = [[[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 768, 1004)] autorelease];
    self.myWebView.backgroundColor = [UIColor whiteColor];
    self.myWebView.scalesPageToFit = YES;
    self.myWebView.autoresizingMask = (UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight);
    self.myWebView.delegate = self;
    [self.view addSubview: self.myWebView];

    [self.myWebView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.gelbeseiten.de/129103114849"]]];

    //More Sites with HTML5-Videos ...
    //[self.myWebView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.gelbeseiten.de/129103746403"]]];
    //[self.myWebView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.gelbeseiten.de/129105233646"]]];
}

- (void)viewDidUnload {
    [super viewDidUnload];

    self.myWebView = nil;
}

- (void)viewWillDisappear:(BOOL)animated {
    [self.myWebView stopLoading];
}

- (void)dealloc {
    myWebView.delegate = nil;
    [myWebView release];

    [super dealloc];
}
Run Code Online (Sandbox Code Playgroud)

来自"新项目"的代码查看控制器(标题):

@interface WebViewTestViewController : UIViewController <UIWebViewDelegate> {
    UIWebView *myWebView;
}

@property (nonatomic, retain) UIWebView *myWebView;
Run Code Online (Sandbox Code Playgroud)

设备日志:

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

Thread 0 Crashed:
0   WebCore                         0x34c7d09e WebCore::RenderLayer::clippingRoot() const + 110
1   WebCore                         0x34c7cf2a WebCore::RenderLayer::childrenClipRect() const + 26
2   WebCore                         0x34c7ce0c WebCore::RenderWidget::setWidgetGeometry(WebCore::IntRect const&) + 40
3   WebCore                         0x34c5e0f8 WebCore::RenderWidget::updateWidgetPosition() + 320
4   WebCore                         0x34ba0170 WebCore::RenderView::updateWidgetPositions() + 144
5   WebCore                         0x34b97d16 WebCore::FrameView::performPostLayoutTasks() + 202
6   WebCore                         0x34b8a6c0 WebCore::FrameView::layout(bool) + 2116
7   WebCore                         0x34bc5244 WebCore::FrameView::forceLayout(bool) + 4
8   WebKit                          0x302c0c24 -[WebHTMLView layoutToMinimumPageWidth:height:maximumPageWidth:adjustingViewSize:] + 136
9   WebKit                          0x302c0b8e -[WebHTMLView layout] + 18
10  WebKit                          0x302c26f2 -[WebHTMLView(WebInternal) _layoutIfNeeded] + 50
11  WebKit                          0x302c2622 -[WebHTMLView(WebInternal) _web_layoutIfNeededRecursive] + 14
12  WebKit                          0x302c251e -[WebHTMLView(WebPrivate) viewWillDraw] + 50
13  CoreFoundation                  0x3581dfc0 -[NSObject(NSObject) performSelector:] + 12
14  CoreFoundation                  0x35826d4a -[NSArray makeObjectsPerformSelector:] + 382
15  WebCore                         0x34bb000c -[WAKView viewWillDraw] + 24
16  CoreFoundation                  0x3581dfc0 -[NSObject(NSObject) performSelector:] + 12
17  CoreFoundation                  0x35826d4a -[NSArray makeObjectsPerformSelector:] + 382
18  WebCore                         0x34bb000c -[WAKView viewWillDraw] + 24
19  CoreFoundation                  0x3581dfc0 -[NSObject(NSObject) performSelector:] + 12
20  CoreFoundation                  0x35826d4a -[NSArray makeObjectsPerformSelector:] + 382
21  WebCore                         0x34bb000c -[WAKView viewWillDraw] + 24
22  CoreFoundation                  0x3581dfc0 -[NSObject(NSObject) performSelector:] + 12
23  CoreFoundation                  0x35826d4a -[NSArray makeObjectsPerformSelector:] + 382
24  WebCore                         0x34bb000c -[WAKView viewWillDraw] + 24
25  WebKit                          0x302c24cc -[WebView(WebPrivate) viewWillDraw] + 56
26  WebCore                         0x34bafec0 WebCore::TileCache::prepareToDraw() + 36
27  WebCore                         0x34bafe6e -[TileLayer display] + 26
28  QuartzCore                      0x31079fb0 CALayerDisplayIfNeeded + 176
29  QuartzCore                      0x3106f56e CA::Context::commit_transaction(CA::Transaction*) + 214
30  QuartzCore                      0x3106f37c CA::Transaction::commit() + 184
31  QuartzCore                      0x31092f96 CA::Transaction::observer_callback(__CFRunLoopObserver*, unsigned long, void*) + 46
32  CoreFoundation                  0x3580ac52 __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 10
33  CoreFoundation                  0x3580aac6 __CFRunLoopDoObservers + 406
34  CoreFoundation                  0x358020c4 __CFRunLoopRun + 848
35  CoreFoundation                  0x35801c80 CFRunLoopRunSpecific + 224
36  CoreFoundation                  0x35801b88 CFRunLoopRunInMode + 52
37  GraphicsServices                0x320c84a4 GSEventRunModal + 108
38  GraphicsServices                0x320c8550 GSEventRun + 56
39  UIKit                           0x341dc322 -[UIApplication _run] + 406
40  UIKit                           0x341d9e8c UIApplicationMain + 664
41  WebViewTest                     0x00002c24 0x1000 + 7204
42  WebViewTest                     0x00002bd8 0x1000 + 7128
Run Code Online (Sandbox Code Playgroud)

任何人都可以给我一个想法吗?

先谢谢,弗洛里安

xin*_*.sg 0

我也有完全一样的问题。还没有答案。看到许多其他人报告了类似的问题 - 仅限 iOS 4.2.1。

基本上,我有一个 UIView 控制器,其子视图为 webview,并将 URLRequest 加载到 youtube 链接。

第一次加载 viewController 时,控制台会记录错误“无法读取 /Developer/Platforms/iPhoneOS.platform/DeviceSupport/4.2.1 (8C148)/Symbols/System/Library/Internet Plug-Ins/QuickTime Plugin 的符号。 webplugin/QuickTime 插件(未找到文件)。”。我停止加载并释放 viewController。第二次我使用对 youtube 链接的相同请求重新加载新的 viewController 时,现在应用程序因 EXC_BAD_ACCESS 崩溃

  • 哦,我的错误,它在 iOS 4.3 的 Xcode 3.2.6 中没有得到解决……只是因为我太兴奋而在加载之前拖动它,正如 Srijith Vijayamohan 所建议的那样。我最终通过 Srijith Vijayamohan 的建议解决了这个问题。谢谢。 (2认同)