2012-07-12 58 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]; 
    } 

这个固定为我。