【问题标题】:Thread 1 : EXC_BAD_ACCESS (Code = 1, address = 0x30000008) issue generated线程 1:EXC_BAD_ACCESS(代码 = 1,地址 = 0x30000008)问题生成
【发布时间】:2012-09-08 09:23:13
【问题描述】:

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

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) 生成问题。

【问题讨论】:

  • 向我们展示执行从第一个视图控制器到第二个视图控制器的转换、从第二个控制器到第三个控制器的位置以及如何“返回”到前一个控制器的代码。你在做pushViewControllerpopViewControllerAnimated 吗?或者你在做presentViewControllerdismissViewControllerAnimated?另外,如果你还没有打开僵尸,请确保你打开了。
  • @Rob - 首先我要感谢你试图帮助我。我将使用pushViewController 烘烤到前一个控制器。简而言之,我使用 UINavigationController。
  • 很好,然后向我们展示您调用pushViewControllerpopViewControllerAnimated 的代码。另外,enable zombies.
  • 在Thirdviewcontroller 中,尝试逐一注释Thirdviewcontroller.m 中释放对象的每一行。
  • 设置异常断点——这将帮助您追踪问题的根源。 dosomethinghere.com/2011/04/18/xcode-4-exception-breakpoint 展示了如何做到这一点。

标签: iphone objective-c ios xcode


【解决方案1】:

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

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

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

【讨论】:

  • 感谢断点的建议,我发现了很多我不知道的问题。 ;(但我的问题没有解决:(好吧,但你的尝试是最好的,所以我要感谢你尝试帮助我:)
  • 正如@Rob 所示,我提出了与How can i start my UITableView section with number 0 when i have multiple sections? 的UITableView 部分相关的问题,所以请检查一下:) 谢谢
【解决方案2】:

简而言之,当你释放分配给一个已经被释放的对象的内存时,就会出现这种类型的问题。当您返回之前的UIViewController(或其他情况)时,很可能会产生此类问题。

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

Hamster Emporium archive:So you crashed in objc_msgSend()

【讨论】:

【解决方案3】:

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

【讨论】:

  • 如您所见,我问了与How can i start my UITableView section with number 0 when i have multiple sections? 的 UITableView 部分相关的问题,所以请检查一下 :) 谢谢 –
  • 太好了,我去看看it
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-03-13
  • 2013-10-11
  • 2019-07-11
  • 2020-02-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多