错误:路径'/var/.../default.realm'上的域已在具有不同架构的当前线程上打开

时间:2018-02-03 23:15:05

标签: realm

尝试在iOS设备/模拟器上的新版本/安装上执行Realm.open({schema: [Schema]})时出现此错误。一切都在Android应用程序上正常工作,因为它之前从未使用迁移更改schemaVersions。

我对此错误的理解是,设备上Realm文件的schemaVersion与schemaVersion: 0的默认Realm.open({schema: [Schema]})不同。我的另一个理论是我的应用程序试图在同一文件上的现有打开的Realm配置期间打开Realm配置。

为了解决我的第一个理论,我一直试图用Realm.clearTestState()Realm.deleteFile({schema: [Schema]})重置域文件无效。对于第二个,我在Realm.open()中放置了并发的setTimeout()个实例,这样一次只能打开一个Realm实例。

有没有其他方法可以尝试重置Realm文件,以便设备上的Realm文件和配置都是相同的模式?

2 个答案:

答案 0 :(得分:3)

事实证明,我并没有在每个实例中使用完全相同的模式打开Realm。意思是我从我的realm.js文件中导出了多个对象模式,并且是单独打开它们而不是整体打开它们,我认为这是正确的方法。

所以基本上,我这样做......

Realm.open({schema: [object1, object2, object3]})
Realm.open({schema: [object4, object5]})

当我应该这样做的时候:

const Schema = [object1, object2, object3, object4, object5];
Realm.open({schema: Schema});

希望这可以帮助其他任何人遇到这个问题,因为我访问了Github和StackOverflow上的所有其他类似的错误报告,并且没有遇到过这个提示。

答案 1 :(得分:0)

我今天遇到了相同的错误消息,并且我正在运行本机程序。上面的方法可以帮助我使程序重新开始顺利运行;但是,稍后,在我来回浏览不同的页面之后,并且一个页面具有多个功能需要利用Realm进行查询/插入后,错误消息再次容易出现。

最后,我发现,根本原因是必须正确关闭实例化的Realm实例。希望以下代码段对您有所帮助:

Realm.open({schema: [object1]}).then(realm => {
  realm.write(() => {
    // do whatever necessary in this transaction.
  }

  // Remember to close it at last
  realm.close();
}

以下是官方网站中有关过滤的示例代码,也可以作为参考: https://realm.io/docs/javascript/latest/#filtering