iphone sdk - stringByEvaluatingJavaScriptFromString导致EXC_BAD_ACCESS

时间:2010-06-22 13:53:03

标签: iphone

在我的标签栏应用程序中,内存不足:

- (void)webViewDidFinishLoad:(UIWebView *)webView {
  pageText = [NSString stringWithFormat:[webView stringByEvaluatingJavaScriptFromString:@"document.body.innerHTML"]];

pageText行导致崩溃。如果我注释掉这一行,那么就没有崩溃,我认为这不是pageText NSString的错误。

我认为这是在webViewDidFinishLoad的最后一个实例上,看起来在webViewDidFinishLoad完成之前它正在发布?

或者这个webViewDidFinishLoad没有document.body.innerHTML?

任何想法?

提前感谢,

ADE。

1 个答案:

答案 0 :(得分:3)

stringByEvaluatingJavaScriptFromString:会返回自动释放的NSString。您无需使用stringWithFormat:。您的代码也没有有效的格式。

pageText = [NSString stringWithFormat:@"%@", [webView stringByEvaluatingJavaScriptFromString:@"document.body.innerHTML"];

会更正格式错误,但是因为您正在分配pageText,所以由于自动释放,您可能会遇到崩溃的风险。

以下是所有必要的。 注意:我假设Javascript是有效的....

- (void)webViewDidFinishLoad:(UIWebView *)webView
{
    [pageText release], pageText = nil;

    pageText = [[webView stringByEvaluatingJavaScriptFromString:@"document.body.innerHTML"] retain];

    if (!pageText)
        // innerHTML was empty
        pageText = [[webView stringByEvaluatingJavaScriptFromString:@"document.body"] retain];
}

请注意,添加保留是因为您要分配pageText ivar而不是使用setter。确保在dealloc中添加[pageText release];以防止泄漏。 尝试访问代码中其他地方的pageText时要非常小心,因为它仍然可能是nil要防守