IOS TableViewCell exc_bad_access autorelease错误

时间:2012-07-12 10:28:18

标签: ios memory-management uitableview exc-bad-access

我在tableviewcell( exc_bad_access )的内存管理方面遇到了问题。
我的一个 tableviewcell 包含一个加载异步html数据的uiwebview( loadHTMLString 方法),当前控制器被设置为其委托。
当我从导航控制器中弹出tableviewcontroller太快时,应用程序崩溃。

在我看来,这就是它失败的原因:
  - 如果在控制器之前的单元格deallocs =>好的,委托仍然有效,我甚至可以用自己的dealloc方法将其委托设置为nil   - 如果在控制器之后的单元deallocs(我猜因为表视图单元是自动释放的)=>应用程序崩溃,因为它的委托仍然设置为解除分配的控制器

任何想法如何正确解决这个问题? 谢谢..

cellForRowAtIndexPath中的CODE:

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

2 个答案:

答案 0 :(得分:1)

尝试在发布网络视图之前在单元格解除分配时添加stopLoading

答案 1 :(得分:0)

这是一个较老的问题,但它从未真正得到解决,而我自己也遇到了它。

这件事发生在我身上:当一个单元格加载了一个具有该单元格作为委托的Web视图时,视图控制器会崩溃。 UIWebView的文档声明在取消分配之前,Web视图的委托应设置为nil。对于重用的表视图单元格来说似乎也是如此。

我的解决方案:在自定义单元格中覆盖这些:

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

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

这为我解决了。