核心数据应用程序崩溃,“EXC_BAD_ACCESS”& NSZombie

时间:2011-05-20 01:10:46

标签: iphone ios core-data exc-bad-access nsmanagedobjectcontext

我目前正在开发一款严重依赖核心数据的应用。一世 使用导航控制器来推送和弹出视图。我走的时候 有时在程序导航控制器的堆栈中 崩溃,我收到错误(通常突出显示在 managedObjectContext合成或dealloc):

"Thread 1: Program received signal: "EXC_BAD_ACCESS".

我使用静态分析仪来修复它发现的所有泄漏。

我使用了NSZombie,看起来我的分配上升了,然后当我拉下菜单视图时不要下去。然后,当我点击另一个菜单视图时,我得到两个结果。

0 Category:NSManagedObjectContext EventType:Malloc RefCt:1 Timestamp:00:04.133.722 Address:0x5da0f10 Size:128 RespLib:pua-app RespCaller:-[pua_appAppDelegate managedObjectContext]

1 Category:NSManagedObjectContext EventType:Zombie RefCt:-1 Timestamp:00:16.524.983 Address:0x5da0f10 Size:0 RespLib:pua-app RespCaller:-[OpenersroutinesMenuViewController setManagedObjectContext]

我对这种类型的调试有ZERO经验,但显然托管对象上下文是“不开心”,我的猜测是我没有正确创建或管理上下文,因为它通过菜单传递。这也很有趣,因为MOC没有在这些菜单中被更改,并且在修改它的视图中不会发生此错误。

1 个答案:

答案 0 :(得分:1)

首先,泄漏永远不会导致这种崩溃。泄漏是一种不足释放。这些崩溃通常是由于过度释放造成的。

从您的NSZombie输出中,看起来您的MOC过度释放了。我会查看您处理managedObjectContext的每个位置,并确保正确保留和释放它。第一条规则是使用访问器而不是直接弄乱你的ivars(-init-dealloc和你的访问者除外,它们应该使用ivars)。

这种问题的一个可能原因是多线程。确保您没有从多个线程访问相同的MOC。它们不是线程安全的。

该问题可能与视图或菜单无关。问题很可能是您在未保留的MOC上调用-release