试图理解NavigationController在其堆栈上保留ViewControllers的计数

时间:2010-04-29 10:53:23

标签: iphone objective-c uikit uinavigationcontroller release

我有一个UITableViewController作为我的navigatorController的rootViewController。 当我按下表格单元格时,我会执行以下操作:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath   *)indexPath {
MessageHistory *msg = (MessageHistory *)[[self fetchedResultsController]objectAtIndexPath:indexPath];
ConversationViewController *chatController = [[ConversationViewController alloc]initWithNibName:@"ConversationView" bundle:nil andUser:msg.user];
[self.navigationController pushViewController:chatController animated:YES];
[chatController release];

但是当我从chatController返回时(使用导航栏上的后退按钮)我得到“EXC_BAD_ACCESS”

评论

//[chatController release];

解决了这个问题。怎么样?我想当推送到navigationController时会添加一个保留计数,当它弹出时会释放它吗? 另外我相信如果我在推送到导航控制器之后没有包括释放,那我就会产生泄漏 知道这里发生了什么吗?

1 个答案:

答案 0 :(得分:0)

我有几次遇到这个问题,并且几乎疯了,试图找到错误。

在我的情况下,我在第二个视图中有一个UIWebView,UIViewController设置为委托。在我的UIViewController dealloc方法中,我忘了把webView.delegate = nil。

当第二个UIViewController被弹出并因此被释放时,UIWebView正在向它的委托发送消息(第二个UIViewController,它不再存在)。

不知道这是否适用于你,但我花了几天时间寻找这个错误,所以也许它有任何帮助。