我在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];
....
答案 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];
}
这为我解决了。