2010-12-22 48 views
13

从的NSManagedObjectContext -save内:我得到这个消息:调试SIGABRT:

断言失败:(_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 读符号(文件未找到)。

发生这种情况时,我删除了一个实验对象与运行多对多与样品必须与数据一。实验也有许多使用Page的应用程序,其中有许多可以运行的Display。我提到这一点是为了指出图的周期性。下面是模型的简化曲线图:

alt text

的实验与用户相互作用的顶级实体。一个实验包含多个运行对象。运行是从特定时间开始到晚些时候结束的数据集合。由于可以同时从多个来源收集数据,因此每个运行的每个来源都有一个样本。实验包含数据,需要查看这些数据并与之交互。因此,每个实验都具有一定数量的Page对象,并且每个页面都包含一定数量的显示(例如图形,米)。显示器被配置为显示属于实验的运行的一些子集。因此,虽然实验可能包含数十个运行,但其中的一个页面一次只会显示一些运行。显示实体维护这个列表。 A Display是而不是的一个视图。一个视图将引用一个Display对象并被通知Display对象的变化。

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

有趣的是,当我重新启动应用程序时,所有标记为删除的对象都已被删除。另外,如果某个实验没有运行对象,则删除工作不会发生。对于这一点,从实验中删除单个运行也是有效的。

我希望有人看过类似的东西,并可以提供什么会导致此建议。或者,如果有人有关于如何获取iOS 4.2.1的libXcodeDebuggerSupport.dylib的建议,那也可能会有所帮助。

更新:我遵循的建议发现here,并能够得到Xcode找到iOS 4.2.1的libXcodeDebuggerSupport.dylib。但是,这并没有帮助诊断问题 - 这仍然存在。

更新2:读了一下并下载了一个版本的unwind-sjlj.c后,似乎我正在处理类似未捕获异常的情况。我不知道这是如何帮助我...

更新3:感谢堪察加半岛,我做了一些我可能应该在几天前完成的事情:打开“关于Objective-C异常停止”。这让我看到对被删除对象的引用仍然被保留 - 更糟糕的是,观察被删除对象的键值。修复这个固定的问题,我能够恢复使用删除规则而不是-prepareForDeletion方法。

+0

你的原始删除规则是什么? Cascasde一路下降到数据级别? Display是否有直接访问运行的原因,而不是通过Page /实验树? – 2010-12-22 04:55:14

+0

将Xcode更新到3.2.5以摆脱调试器警告。你的设备是4.2.1,它需要最新的调试符号3.2.5 – 2010-12-22 05:50:16

回答

16

您应该尝试激活“运行>停止对Objective-C异常”。它让我找到了访问某个对象的地方变成了错误,这是造成问题的根本原因。