2012-07-12 128 views
1

我有一個tableviewcell的內存管理問題(exc_bad_access)。
一個礦井的tableviewcell包括加載異步HTML數據(loadHTMLString方法),並且所述電流控制器被設置爲它的代表一個UIWebView。
當我彈出從我的導航控制器太快應用程序崩潰tableviewcontroller。

在我看來,這就是爲什麼它失敗的原因:
- 如果控制器之前細胞deallocs =>一切ok,委託仍然生活,我甚至可以將其委託設置爲nil在自己的dealloc方法
- 如果細胞deallocs控制器後(我想,因爲表視圖細胞自動釋放)=>應用程序崩潰,因爲它代表它仍然設置爲解除分配的控制器

IOS TableViewCell exc_bad_access autorelease錯誤

不知道如何正確地解決這個?? 謝謝。在的cellForRowAtIndexPath

CODE:

... 
CustomTableViewCell * cCell = (CustomTableViewCell*)cell; 
cCell.myWebView.delegate = self; 
[[cCell myWebView] loadHTMLString:html baseURL:baseURL]; 
.... 
+0

你能給一段代碼嗎? – fvwmer 2012-07-12 10:41:41

+0

爲了檢查你的猜測,你可以在cell和viewController類'dealloc'上添加NSLog,我確信autoreleased單元在控制器之前被釋放。 – 2012-07-12 13:37:21

+0

應用程序在調用cell dealloc方法中的NSLOG之前崩潰。我想autorelease池來控制器釋放後。很明顯,當控制器被按下時,我真的很快點擊按鈕。如果我評論「[[cCell myWebView] loadHTMLString:html baseURL:baseURL];」一切工作正常.. – user1427835 2012-07-12 14:50:25

回答

1

嘗試釋放web視圖之前在細胞釋放添加stopLoading

+0

嘗試過..但沒有任何反應.. – user1427835 2012-07-12 14:51:20

+0

@ user1427835請發佈回溯。 – 2012-07-12 15:06:22

+0

*** - [MyCustomViewController respondsToSelector:]:發送到釋放實例的消息0x5c607f0 [未知](gdb) – user1427835 2012-07-12 16:08:48

0

這是一個老問題,但它從來沒有真正得到有效解決,我只是碰到了它自己。

這發生在我身上:當一個細胞裝有誰的電池,因爲它的委託Web視圖視圖控制器將崩潰。 UIWebView的文檔指出,在取消分配之前,Web視圖的委託應該設置爲零。這似乎也適用於重用的表格視圖單元格。

我的解決辦法:在你的自定義單元格覆蓋這些:

- (void)prepareForReuse 
    { 
    [super prepareForReuse]; 
    self.myWebView.delegate = nil; 
    [self.myWebView stopLoading]; 
    } 

- (void)dealloc 
    { 
    self.myWebView.delegate = nil; 
    [self.myWebView stopLoading]; 
    } 

這個固定爲我。