这会导致EXC_BAD_ACCESS吗?

时间:2009-03-13 22:02:29

标签: iphone cocoa-touch uiwebview

离开下面的方法后,我得到一个EXC_BAD _ACCESS。此时htmlDocument变为无效,因为它超出了范围,所以它应该是无效的。但这就是我收到错误的原因吗?加载contentView(UIWebView)时,htmlDocument消失了。但是contentView中是否已经拥有了loadHTMLString所需的内容?

- (void)viewDidLoad {
[super viewDidLoad];
//something other processing here

NSString *htmlDocument = [NSString stringWithFormat:@"<html> \n"
"<body>%@</body> \n"
"</html>", aboutContent];
[contentView loadHTMLString:htmlDocument baseURL:[NSURL URLWithString:@"http://www.abc.com"]];  

}

有没有更好的方法来一直遵循这个失败?离开这个方法是我的代码行的结束。那里的SDK东西。

5 个答案:

答案 0 :(得分:2)

在您的第二篇文章中,您注释掉的行([按钮释放])会释放已标记为自动释放的对象。

删除你正在为按钮分配的“autorelease”或删除[button release]语句,以便编译代码而不会出现错误和异常。

如果一个对象被标记为自动释放,则在其上调用一个释放将与在释放的实例上调用一个释放相同,因此会出错。

答案 1 :(得分:1)

我会说这个代码没有任何问题,假设'aboutContent'是指向对象的有效指针。

答案 2 :(得分:1)

您可以尝试在模拟器上使用Guard Malloc运行您的应用程序,但不保证能够显示任何内容。我建议你开始评论语句,直到找到导致错误的语句。

答案 3 :(得分:1)

目前尚不清楚您刚刚提供的代码片段在没有更多上下文的情况下会发生什么。也就是说,看起来你想要做的就是在设备中本地加载一些HTML。为什么不这样做?

- (void)viewDidLoad {
    [webView loadRequest:[NSURLRequest 
                          requestWithURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] 
                                                pathForResource:@"help/about.html"
                                                ofType:@"html"]isDirectory:NO]]];
}

使用这种技术,您可以直接在手机中创作基于HTML的文档,而无需用户明智地了解他们实际上正在查看Web视图:这包括Javascript,CSS,整个蜡球。我见过人们实际上有他们的iPhone应用程序出去上网只是为了在互联网上呈现静态页面,这是不必要的。

答案 4 :(得分:1)

在第二篇文章中的示例代码中,您释放的按钮UIBarButtonItem *button不会被您注释掉的版本后保留 - 因此会被释放。

您需要将按钮添加到另一个视图(使用adSubview)才能显示,然后然后就可以释放它。父视图将保留按钮。

当然,如果您要再次参考该按钮,您的视图控制器应保留保留并释放其dealloc中的按钮。