在NSManagedObjectContext -save中调试SIGABRT:

时间:2010-12-22 02:30:47

标签: iphone core-data nsmanagedobject nsmanagedobjectcontext

从NSManagedObjectContext内部 - 保存:我收到此消息:

  

断言失败:(_ Unwind_SjLj_Resume()无法返回),函数_Unwind_SjLj_Resume,文件/SourceCache/libunwind/libunwind-24.1/src/Unwind-sjlj.c,第326行。

     

收到信号:“SIGABRT”。

     

警告:无法读取符号   /Developer/Platforms/iPhoneOS.platform/DeviceSupport/4.2.1   (8C148)/Symbols/Developer/usr/lib/libXcodeDebuggerSupport.dylib   (找不到档案)。

当我使用Run删除带有to-many的Experiment对象时,会发生这种情况,其中包含Sample,其中包含一个带有Data的to-one。实验也有许多与页面有很多与显示,其中有许多运行。我提到这一点是为了指出图的周期性。以下是模型的简化图:

alt text

实验用户与之交互的顶级实体。实验包含多个Run对象。运行是从特定时间开始并在稍后结束的数据集合。由于可以同时从多个源收集数据,因此每个Run的每个源都有一个Sample。实验包含数据,需要查看和交互此数据。因此,每个实验都有一些页面对象,每个页面包含一定数量的显示(例如,图形,米)。显示器配置为显示属于实验的运行的某个子集。因此,虽然实验可能包含数十个运行,但其中一个页面一次只会显示一些运行。 Display实体维护此列表。显示视图。视图将引用Display对象,并通知Display对象的更改。

我一直在使用删除规则,但现在已经切换到“无操作”删除规则以及所有这些类的-prepareForDeletion方法。这种变化没有任何区别。在这两种情况下,错误消息都是相同的。

有趣的是,当我重新启动应用程序时,所有标记为删除的对象都已被删除。

此外,如果实验没有运行对象,则删除无效。就此而言,从实验中删除单个Run也可以。

我希望有人见过这样的东西,并提供有关导致这种情况的建议。或者,如果某人有关于如何获取iOS 4.2.1的libXcodeDebuggerSupport.dylib的建议,这可能也会有所帮助。

更新:我按照了here找到的建议,并且能够让Xcode找到适用于iOS 4.2.1的libXcodeDebuggerSupport.dylib。但这对于诊断问题毫无帮助 - 这仍然存在。

更新2:在阅读了一下并下载unwind-sjlj.c版本之后,似乎我正在处理类似未捕获的异常。我不确定这对我有什么帮助...

更新3:感谢堪察加,我做了几天前应该做的事情:打开“停止Objective-C例外”。这让我看到仍然保留了对已删除对象的引用 - 更糟糕的是,键值观察了已删除的对象。解决了这个修复过的问题,我能够恢复使用删除规则而不是-prepareForDeletion方法。

1 个答案:

答案 0 :(得分:16)

您应该尝试激活“运行>停止Objective-C异常”。它允许我找到一个可以访问物体的地方,这个物体变成了故障,这是问题的根本原因。