线程1:生成EXC_BAD_ACCESS(Code = 1,address = 0x30000008)问题

时间:2012-09-15 13:04:23

标签: iphone objective-c ios xcode

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

  

EXC_BAD_ACCESS发生在线程1中的objc_msgSend。

屏幕截图:

enter image description here

在我的应用程序中,我有多个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)问题。

3 个答案:

答案 0 :(得分:16)

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

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

Hamster Emporium archive:So you crashed in objc_msgSend()

答案 1 :(得分:5)

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

这使得更容易找到问题的根源 - 尽管堆栈跟踪是诊断问题的最终方式,但它通常过于详细而无法使用(特别是如果像我一样,你不是编译专家。)

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

答案 2 :(得分:1)

正如@TimD正确指出的那样,你可以设置exception breakpoint,它会突出显示有问题的代码行(而不是试图破译汇编程序或手动尝试识别问题所在)。并且,与往常一样,在诊断这些类型的内存问题时,您应始终enable zombies。最后,在非ARC代码中尤为重要,您应该通过static analyzer运行代码,因为可以在那里找到许多与内存相关的问题。您应该始终确保静态分析器没有警告,因为它总是指出关键的编程错误。