13

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

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

当我删除一个带有运行的多对多的实验对象时,会发生这种情况,该对象具有多对多的样本,而样本具有多对一的数据。Experiment 也有 to-many,Page 有 to-many,Display 有 to-many to Run。我提到这一点是为了指出图表的周期性。这是模型的简化图:

替代文字

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

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

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

此外,如果 Experiment 没有 Run 对象,则删除工作不会发生。就此而言,从实验中删除单个运行也可以。

我希望有人看到过这样的事情,并可以就导致这种情况的原因提供建议。或者,如果有人对如何为 iOS 4.2.1 获取 libXcodeDebuggerSupport.dylib 有建议,那也可能会有所帮助。

更新:我遵循了此处的建议,并且能够让 Xcode 找到适用于 iOS 4.2.1 的 libXcodeDebuggerSupport.dylib。但这对诊断问题完全没有帮助——问题仍然存在。

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

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

4

1 回答 1

16

您应该尝试激活“Run > Stop on Objective-C exception”。它使我能够找到可以访问对象的地方变成了故障,这是问题的根本原因。

于 2010-12-26T18:57:43.160 回答