【问题标题】:Error: Realm at path '/var/.../default.realm' already opened on current thread with different schema错误:路径 '/var/.../default.realm' 的领域已经在当前线程上以不同的模式打开
【发布时间】:2018-07-14 03:46:18
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: realm


    【解决方案1】:

    事实证明,我并没有在每个实例中都使用完全相同的模式打开 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 上的所有其他类似错误报告,但没有遇到此提示。

    【讨论】:

    • 过去两天我在想我该如何解决这个问题。
    • 不幸的是,这对我没有帮助......整天都在坚持。
    【解决方案2】:

    我今天遇到了同样的错误消息,我正在运行一个 react-native 程序。上面的方法帮助我让程序重新开始顺利进行;但是,后来,在我来回导航不同的页面后,一旦一个页面有几个功能需要使用Realm进行查询/插入,错误消息很容易再次出现。

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

    Realm.open({schema: [object1]}).then(realm => {
      realm.write(() => {
        // do whatever necessary in this transaction.
      }
    
      // Remember to close it at last
      realm.close();
    }
    
    

    官方网站中关于Filtering的示例代码也可以作为参考: https://realm.io/docs/javascript/latest/#filtering

    【讨论】:

      猜你喜欢
      • 2021-03-13
      • 2018-06-14
      • 2016-05-13
      • 1970-01-01
      • 2012-05-03
      • 1970-01-01
      • 2017-09-01
      • 2017-05-30
      • 1970-01-01
      相关资源
      最近更新 更多