iphone - 核心数据应用程序崩溃, "EXC_BAD_ACCESS"& NSZombie

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

我目前正在开发一个严重依赖 Core Data 的应用程序。我 使用导航 Controller 来插入和弹出 View 。我去的时候 程序有时回到导航 Controller 的堆栈中 崩溃,我收到错误(通常突出显示在 managedObjectContext 合成或释放):

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

我使用静态分析器修复了它发现的所有漏洞。

我使用了 NSZombie,当我关闭菜单 View 时,我的分配似乎增加了,然后没有减少。然后,当我点击另一个菜单 View 时,我会得到两个结果。

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]

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

最佳答案

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

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

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

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

关于iphone - 核心数据应用程序崩溃, "EXC_BAD_ACCESS"& NSZombie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6066510/

相关文章:

iphone - 在 xCode 中加载自定义 UIFonts

iphone - 单元格滑动在一个项目中有效,但在另一个项目中无效

ios - 如何通过 XCode 6.1 项目->目标->功能->数据保护在 iOS 8 应用程序上实现 iOS 数据保护?

iphone - IOS 是否有发送网页请求并在 iphone ios 上忘记它?

iphone - iPhone应用程序在屏幕上时是否可以弹出本地通知?

ios - Phonegap + 数据库存储

ios - 强制通用链接在 Mobile Safari 中打开

ios - 如果我不在 iOS 中展开 Segue 会怎样?

ios - 核心数据中的计算属性

ios - 如何区分 CoreData 中的 Boolean 和 NSNumber