2010-04-29 33 views
0

我有一个UITableViewController作为我的navigatorController的rootViewController。 当我按下一个表格单元格我做到以下几点:试图了解NavigationController在其堆栈上保留ViewControllers的计数

- (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添加保留计数,并从它弹出时释放它?
另外我相信,如果我推送到navcontroller后不包括发布,我产生泄漏。
任何想法这里发生了什么?

+0

这看起来像你正在解决某处的释放实例。使用NSZombieEnabled集运行您的应用程序,以查看您遇到问题的实例。 – Vladimir 2010-04-29 11:01:20

+1

感谢您的提示。不知道NSZombieEnabled它帮助你说找到释放的实例。 对于像我这样不知道NSZombieEnabled的人来说,这里是如何在xcode中启用它: 1.双击Xcode项目的Executables组中的可执行文件。 2.单击参数选项卡。 3.在“要在环境中设置变量:”部分中,创建一个名为“NSZombieEnabled”的变量并将其值设置为“YES”。 确保删除此分发! – sharkan 2010-05-01 18:16:26

回答

0

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

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

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

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

+0

感谢分享,虽然这不是我的问题(请参阅我对弗拉基米尔的评论),但您的情况也可能会达到我的项目。很好记住它 – sharkan 2010-05-01 18:19:13