2010-06-22 42 views
2

其中存储空间不足:iPhone的SDK - stringByEvaluatingJavaScriptFromString在我的标签栏的应用程序造成EXC_BAD_ACCESS

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

的pageText线导致飞机坠毁。如果我注释掉这一行,那么没有崩溃,我不认为它是pageText NSString的错。

我认为这是对webViewDidFinishLoad的终审,它看起来像是之前webViewDidFinishLoad用它做被释放?

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

有什么想法?

在此先感谢,

ade。

+0

也只是发现,如果我只是将pageText分配给document.body而不是document.body.innerHTML我没有崩溃。所以它看起来像这样的请求没有造成innerHTML的 - 我怎么可以检查这个场景... – ader 2010-06-22 14:24:45

回答

3

stringByEvaluatingJavaScriptFromString:返回一个自动释放NSString。您不需要使用stringWithFormat:。您的代码也没有有效的格式。因为要分配pageText你以后运行崩溃的风险,由于自动释放

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

会纠正错误的格式,但是。

以下是一切必要。 注:我假设的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伊娃,而不是使用二传手加入。确保您在dealloc中添加[pageText release];以防止泄漏。试图在其他地方访问pageText在你的代码,因为它可能仍然是nil当 要非常小心。 防守

+0

感谢不仅是解决方案,但相干的解释:) – ader 2010-06-22 14:40:09

相关问题