迁移后,应用程序在加载默认域时崩溃

时间:2015-09-01 16:29:53

标签: realm

在迁移后加载默认Realm时,Realm 0.95.0有时会崩溃。这种情况很少发生,我们还没有能够在调试环境中重现它。我们正在使用Realm-Cocoa,但是从Swift端点调用。

    var config = RLMRealmConfiguration.defaultConfiguration()
    config.schemaVersion = 3
    config.migrationBlock = { (migration, oldVersion) -> Void in
      ...
    }

    RLMRealmConfiguration.setDefaultConfiguration(config)
    RLMRealm.defaultRealm()

这是回溯

0x100313ae0 [void realm::util terminate<unsigned long, unsigned long>(char const*, char const*, long, unsigned long, unsigned long) ] (terminate.hpp:45)
...
...
0x10030c44c [realm::SharedGroup SharedGroup(realm::Replication&, realm::SharedGroup::DurabilityLevel, char const*) ] (group_shared.hpp:975)
0x1003073a0 [RLMRealm initWithPath:key:readOnly:inMemory:dynamic:error:] (RLMRealm.mm:235)
0x10030821c [RLMRealm realmWithConfiguration:error:] (RLMRealm.mm:400)
0x100307a98 [RLMRealm defaultRealm] (RLMRealm.mm:302)
...

我们可以做些什么来防止这次崩溃?根据问题#1589

,是否需要将迁移功能包装在autoreleasepool块中?

1 个答案:

答案 0 :(得分:1)

每当您在堆栈跟踪中看到realm::util terminate时,可能是因为Realm中的内部一致性断言失败,并且通常表示损坏的文件或Realm本身的错误。如果您可以访问设备日志(例如,如果您使用Crashlytics或Hockey等服务收到此崩溃报告),您应该会看到断言失败打印的消息。

在这些情况下,您可以做的最好的事情是向领域团队(help@realm.io)报告问题,尽可能多地提供信息,以便我们重现问题,并进一步调查。我们通常非常敏感。