领域崩溃,根本不提供任何解释

Realm Crashes, Providing No Explanation at All

我有一个使用 CoreData 的项目。移植它以使用 Realm。包括重写一堆测试和创建示例数据。

去 运行 它,当我在任何地方执行 Realm() 时,我得到一个 EXC_BAD_ACCESS 异常。

当然我在想也许我应该:

做了那些事,还是崩溃。奇怪的是,查询好像返回了一些结果,然后就崩溃了。

此时我的主要问题可能是因为这是用 C++ 编写的,这是一种症状或包装器炎:由于缺乏有用的错误报告,包装器的语法优势很快就会消失.

我现在甚至 运行 都无法进行测试,因为模拟器在启动时崩溃了。

问题很简单,除了删除app和realm文件还能做什么?我在导致崩溃的代码中做的唯一事情是:

  1. 实例化领域
  2. 请求所有给定对象()
  3. 检查结果计数是否 > 0

这如何导致访问错误?

更新

我注释掉了应用程序中的所有 Realm 代码,这样模拟器就会启动,然后返回尝试 运行 测试。我正在使用生成内存实例的 RealmEnabledTestCase,然后 运行 进行绝对最简单的测试:创建一个具有一些属性的对象,然后保存它。因访问错误而崩溃。

关于它在做什么的问题,这里是符号轨迹:

realm实例的配置在测试中完成class.

这里是 Realm 的 JP。

一些通常有用的事情(即使没有 Realm)来解决 EXC_BAD_ACCESS 错误是在堆栈跟踪中寻找被取消引用的提示,或者 运行 使用 Address Sanitizer 或启用僵尸。有一些 SO 帖子介绍了一些调试技巧 here and on raywenderlich.com here

至于在您的具体情况下可能会发生什么,很难说,因为您没有完全共享任何代码或步骤供我们重现。我鼓励您提交 GitHub issue 以便我们帮助您解决问题。我们总是尽可能及时响应。

最后,Realm 的核心是用 C++ 编写并包装在 Objective-C 中这一事实与在取消引用空指针或访问无效内存地址时打印有用错误消息的能力没有任何关系。 Realm 的 C++ 核心中发生的所有错误要么被报告为带有一条消息记录到 STDOUT 的断言,要么被暴露为包含描述性消息的 Objective-C 个异常。

原来我的其中一个属性类型不受支持。当然,这在核心数据中永远不会发生,因为它会生成托管对象 类。真是浪费时间。这有很大的潜力,但它无法解析模式并为不可接受的事情输出错误消息,这完全是疯了。