9

我在模拟器上运行应用程序时遇到问题。问题:

EXC_BAD_ACCESS 发生在线程 1 的 objc_msgSend 上。

截屏 :

在此处输入图像描述

在我的应用程序中,我有多个ViewController. 当我单击后退按钮时,UINavigationBar会生成此类问题,我无法解释我的问题,因为所有功能都正常工作。

例子 :-

1 - fitstVController(正常工作)

=> 它有 UITableView,当我点击特定的行时,它会进入另一个 UIViewController (SecoundViewController)

2 - SecoundViewController(正常工作)

=> 它有 UITableView 和 UIActionSheet。当我选择 UiActionSheet 的按钮时,另一个 UIViewController (ThirdViewController) 是打开的

3 - ThirdViewController(正常工作)

=> 它有 UITableView 和多个 UIPickerView。但是这里的问题是我不能回到以前的 UIViewController (SecoundViewController)。=> 当我这样做时,会 生成 EXC_BAD_ACCESS(代码 = 1,地址 = 0x30000008)问题。

4

3 回答 3

20

简而言之,当您释放分配给已经释放的对象的内存时,就会出现此类问题。最有可能的是,当您回到以前UIViewController(或其他情况)时会产生此类问题。

此外,我建议阅读以下链接以获得更全面的解释:

Hamster Emporium 存档:所以你在 objc_msgSend() 中崩溃了

于 2012-09-17T15:01:21.297 回答
5

设置异常断点意味着一旦引发异常,Xcode 就会停止执行。这并非完全万无一失,但这通常会导致应用程序在导致问题的代码行上中断。

这使得追踪问题的根源变得更加容易——尽管堆栈跟踪是诊断问题的权威方法,但它通常过于详细而没有多大用处(尤其是如果你像我一样不是编译器专家。 )

要进行设置,请单击Breakpoints导航器面板中的符号,然后单击+底部的按钮。然后从选项列表中选择Add Exception Breakpoint和。Objective-C

于 2012-09-16T09:15:58.013 回答
2

正如@TimD 正确指出的那样,您可以设置一个异常断点,它将突出显示有问题的代码行(而不是尝试破译汇编程序或手动尝试识别问题所在)。而且,与往常一样,在诊断这些类型的内存问题时,您应该始终启用僵尸。最后,在非 ARC 代码中尤其重要的是,您应该通过静态分析器运行代码,因为在那里可以识别出许多与内存相关的问题。您应该始终确保静态分析器发出的警告为零,因为它总是指出严重的编程错误。

于 2012-09-15T18:38:29.383 回答