Ios 线程1:EXC\u坏访问(代码=1,地址=0xf1759018)

Ios 线程1:EXC\u坏访问(代码=1,地址=0xf1759018),ios,xcode,runtime-error,exc-bad-access,Ios,Xcode,Runtime Error,Exc Bad Access,所以我得到了这个错误(下图)。当我遇到这个错误时,我会检查我的核心数据库,并根据我收集的电池统计数据平均结果。这是工作正常,直到我休息,然后回来,插上电源,它开始得到这个错误。我有一个异常断点,但除了图像中的崩溃之外,它仍然没有显示任何内容 有人知道我该怎么做吗 xcode版本5.0 让我知道,如果我可以张贴任何其他可以帮助找出这是什么原因 对于任何EXC\u BAD\u ACCESS错误,您通常会尝试向已发布的对象发送消息。追踪这些信息的最佳方法是使用 这样做的方法是,永远不会真正释放对象,而

所以我得到了这个错误(下图)。当我遇到这个错误时,我会检查我的核心数据库,并根据我收集的电池统计数据平均结果。这是工作正常,直到我休息,然后回来,插上电源,它开始得到这个错误。我有一个异常断点,但除了图像中的崩溃之外,它仍然没有显示任何内容

有人知道我该怎么做吗

xcode版本5.0

让我知道,如果我可以张贴任何其他可以帮助找出这是什么原因


对于任何
EXC\u BAD\u ACCESS
错误,您通常会尝试向已发布的对象发送消息。追踪这些信息的最佳方法是使用

这样做的方法是,永远不会真正释放对象,而是将其包装为“僵尸”,并在其内部设置一个标志,表示该对象通常会被释放。这样,如果您再次尝试访问它,它仍然知道在您出错之前是什么,并且有了这一点信息,您通常可以回溯到问题所在

当调试器有时在任何有用的信息上出错时,它在后台线程中尤其有用

需要注意的一点非常重要但是,您需要100%确保这只出现在调试代码中,而不是在XCode之外测试的任何代码中。因为从来没有发布过任何东西,所以你的应用程序会一个接一个地泄漏。为了提醒我这样做,我将此日志放在appdelegate中:

if (getenv("NSZombieEnabled"))
  NSLog(@"NSZombieEnabled!");

如果您需要帮助找到准确的线路,请构建并运行。当应用程序崩溃时,调试器将准确显示哪一行,并结合NSZombieEnabled,您应该能够准确了解释放后访问对象的原因和类型。

有时,快速修复方法是从设备中删除应用程序并再次运行。如果成功,则表示您更改了核心数据模型或类似的内容。

这发生在我从Firebase worker调用createMessage函数并返回整个Firebase文档时。firebase文档不应作为一个整体返回,这是一种糟糕的编码实践,相反,您应该获取文档并对其进行解析,从中获得所需的基本类型,然后返回。希望这对将来可能遇到这种情况的人有所帮助。

![在此处输入图像描述][2][2]:@coneybeare我无法进行构建和调试,但在构建和运行过程中,我得到了此信息(请参见图像)。所以我只需要弄清楚地址的内存分配是哪一行,出了什么问题?您的消息被发送到了一个解除分配的实例,所以使用僵尸,正如我在上面向您展示的那样。Xcode非常有能力进行构建和调试,所以我不知道你在说什么。如果使用Xcode 5,如果断点被激活,构建和调试将一直处于打开状态。这可能是您困惑的根源。(CMD-Y)仅禁用断点。我也找不到一个构建和调试的选项。似乎你错过了我答案中的重要部分。僵尸是你现在需要关注的东西。我试过了,但没有成功。我认为,当您尝试使用已更改的数据库运行时,通常会收到一条错误消息,该数据库表示数据库中发生了更改