2010-06-22 45 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

相關問題