在我的应用程序中,我有一个UIViewController,由另一个ViewController的导航控制器推送。它包含一些视图,按钮,scrollView和加速度计支持。当我点击navigationController的“后退”按钮时,应用程序崩溃时没有任何日志消息,除了这个: “警告:无法读取/Developer/Platforms/iPhoneOS.platform/DeviceSupport/4.3.3(8J2)/Symbols/Developer/usr/lib/libXcodeDebuggerSupport.dylib(未找到文件)的符号。 (GDB)” 调试器将我链接到main.m中的这一行:
int retVal = UIApplicationMain(argc, argv, nil, nil);
带有“EXEC_BAD_ACCESS” 这是什么意思?
修改 你们所有人都是对的。 问题出在加速度计上。我设置了委托([UIAccelerometer sharedAccelerometer] .delegate = self;)并没有删除它。这就是我的代码中没有用于链接的调试器的行的原因。我刚补充一下:
- (void)viewWillDisappear:(BOOL)animated {
[UIAccelerometer sharedAccelerometer].delegate = nil;
}
并且问题消失了。因此,如果您正在使用任何设备功能,请小心代表。
答案 0 :(得分:6)
您是否已将 Zombies 设置为已启用?这将使您能够跟踪是否访问已发布的对象,并告诉您它是哪个对象。
如果您使用的是XCode 4,则可以在项目 - >中启用僵尸。编辑方案 - >诊断,选中“启用僵尸”复选框。
还要确保设置为“ Break on Exception ” - 在XCode 4中转到断点视图,按左下角的加号,然后选择“添加例外”断点......“表示所有异常。然后XCode将在发生异常的位置中断,并且您将看到不仅仅是UIApplicationMain作为位置。
答案 1 :(得分:1)
这意味着您已尝试读取/写入您无权限的内存块。也许您正在尝试使用未分配/初始化的对象。检查代码,调试代码并检查变量以找到解决方案。
答案 2 :(得分:1)
我猜你有一个内存警告,当你回去时,你的应用程序已经取消分配了一些不存在的数据。
将一些断点放入didReceiveMemoryWarning
,dealloc
,viewDidUnload
和viewDidLoad
,以查看之前控制器中发生的情况。
答案 3 :(得分:1)
EXC_ BAD_ ACCESS是一个例外(EXCeption_ BAD_ ACCESS)。
如果在objc_exception_throw
上设置断点(调试选项卡左下角的符号+),您将获得这些断点。
您可能需要查看NSZombieEnabled
(http://www.cocoadev.com/index.pl?NSZombieEnabled),因为您可能正在尝试访问dealloc'd对象。