间歇性的EXC_BAD_ACCESS

时间:2011-03-19 07:51:43

标签: iphone uinavigationcontroller exc-bad-access

我有以下代码创建模态导航控制器并显示它。

DetailViewController *content = [[DetailViewController alloc]initWithNibName:@"DetailView" bundle:nil];

content.navigationItem.leftBarButtonItem = [[[UIBarButtonItem alloc] initWithTitle:@"Close" 
                                                                             style:UIBarButtonItemStylePlain
                                                                            target:content
                                                                            action:@selector(closeButtonPress:)] autorelease]; 
UINavigationController *modalNavController = [[UINavigationController alloc] initWithRootViewController:content];  
modalNavController.modalTransitionStyle = UIModalTransitionStyleCoverVertical;

[self presentModalViewController:modalNavController animated:YES];

[modalNavController release];

这种方法在99%的情况下都可以正常工作,但在奇怪的情况下我会崩溃..

-[__NSCFType closeButtonPress:]: unrecognized selector sent to instance 0x5ca91d0

1 个答案:

答案 0 :(得分:1)

代码看起来(几乎)正确。但是你应该在某个地方发布内容,但是由于这个原因,ExcBadAccess不太可能发生。

所以为了追捕这个,我建议使用NSZombies。 NSZombies可以防止你的对象被释放,它们只是被标记为解除分配(即变成僵尸)。

  1. 打开xcode(3.x)侧栏中的Executable
  2. 右键单击并在您的可执行文件上Get Info
  3. 打开Arguments标签
  4. Variables to be set in the environment
  5. 下添加环境变量
  6. 将其命名为NSZombieEnabled并将其值设置为YES。确保它已激活
  7. 在启用断点的情况下运行代码,直到调用zombie对象
  8. 当你知道它发生在哪里时,你可以更好地调查它发生的原因。