0

离开下面的方法后,我得到了 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的东西从那里。

4

5 回答 5

2

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

删除您正在为按钮执行分配的“自动释放”或删除 [按钮释放] 语句以使代码编译没有错误和异常。

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

于 2009-03-14T09:51:07.477 回答
1

乍一看,我会说这段代码没有任何问题,假设“aboutContent”是一个指向对象的有效指针。

于 2009-03-13T23:20:13.187 回答
1

您可以尝试在模拟器上使用 Guard Malloc 运行您的应用程序,但这并不能保证会出现任何结果。我建议您开始注释语句,直到找到导致错误的语句。

于 2009-03-14T01:28:28.243 回答
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 应用程序放到 Internet 上只是为了在 Internet 上呈现一个静态页面,这实际上是没有必要的。

于 2009-03-14T05:32:20.717 回答
1

从您在第二篇文章中的示例代码中,您发布的按钮UIBarButtonItem *button不会被您注释掉的发布后的任何内容保留 - 因此它被解除分配。

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

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

于 2009-03-14T07:20:33.517 回答