UIWebView loadHTMLString使EXC_BAD_ACCESS崩溃了应用程序

时间:2013-11-16 12:08:40

标签: ios uiwebview exc-bad-access

我的应用中的屏幕需要加载嵌入的YouTube视频。我喜欢这样:

NSString *html = @"<iframe id='ytplayer' type='text/html' width='300' height='390' src='http://www.youtube.com/embed/nK8bGHU3d0U?autoplay=1&origin=http://example.com' style=\"background-color: #000000;\" frameborder='0'/>"
[self embedYouTube:html frame:CGRectMake(left, 780, 640, 500)];

- (void)embedYouTube:(NSString *)urlString frame:(CGRect)frame {    
    NSString *html = [NSString stringWithFormat:urlString, urlString, frame.size.width, frame.size.height];
    UIWebView *videoView = [[UIWebView alloc] initWithFrame:frame];
    videoView.backgroundColor = [UIColor blackColor];
    videoView.opaque = NO;
    [videoView loadHTMLString:html baseURL:nil];
    [self.scrollView addSubview:videoView];
}

这工作了一段时间,但突然间它导致我的应用程序崩溃了EXC_BAD_ACCESS。我把它缩小到这条线:

[videoView loadHTMLString:html baseURL:nil];

我不确定如何从这里开始。此外,我知道这个EXC_BAD_ACCESS通常是内存错误的指示,但在这里似乎并非如此。我不会来回看这个屏幕,只要应用程序启动就立即点击它。它崩溃了。

当我将应用程序移动到硬盘上的其他位置时,它可以正常工作。我不知道为什么。

1 个答案:

答案 0 :(得分:0)

当我运行它时代码没有崩溃,所以我对此没有任何线索,它可能只是一个损坏的缓存(已经有多次非常奇怪的行为)。但是你的代码也没有加载视频,我做了以下更改后才开始工作:

将方法embedYouTube:frame:的第一行更改为:

NSString *html = [NSString stringWithFormat:@"<html><body><iframe class=\"youtube-player\" type=\"text/html\" width=\"%f\" height=\"%f\" src=\"%@\" allowfullscreen frameborder=\"0\" rel=nofollow></iframe></body></html>", frame.size.width,frame.size.height, urlString];

只将视频的源元素传递给方法(只是视频的网址,没有HTML),这样就可以了:

[self embedYouTube:@"http://www.youtube.com/embed/nK8bGHU3d0U?autoplay=1&origin=http://example.com" frame:frame];