【问题标题】:Realm scheme description not identical on Simulator and Device模拟器和设备上的领域方案描述不同
【发布时间】:2017-01-11 12:45:55
【问题描述】:

在我们的应用程序中,我们使用静态领域,我们可以在运行时加载和更新。为了识别领域方案的正确版本,我们使用领域方案描述的 md5 散列。因此,如果我们的架构发生变化,我们只需要提供一个新版本的数据库并且应用程序能够找到它。这样我们就可以同时发布多个版本,每个版本都可以加载或更新其对应的数据库。

这工作了很长时间,直到我们最近发现,在极少数情况下,模拟器和设备上的领域方案描述并不相同。我们有大约 35 个实体,奇怪的是只有一个描述在字段顺序上有所不同。

SomeEntity {
    telefon {
        type = bool;
        objectClassName = (null);
        linkOriginPropertyName = (null);
        indexed = NO;
        isPrimary = NO;
        optional = YES;
    }
    email {
        type = bool;
        objectClassName = (null);
        linkOriginPropertyName = (null);
        indexed = NO;
        isPrimary = NO;
        optional = YES;
    }
}

有什么不同? “电话”和“电子邮件”在真实设备上按顺序切换 - 这当然会导致不同的 md5 哈希。

所有设备上的描述不应该都相同吗?

识别领域方案的独特而可靠的方法是什么?

编辑
我们在两个设备上使用相同版本的领域。

【问题讨论】:

    标签: ios realm


    【解决方案1】:

    所有 Realm 文件都通过一个名为 schemaVersion 的值跟踪其架构的版本控制。您可以通过增加Configuration 对象中的值来显式控制领域所在的架构版本。增加它会触发迁移:

    let config = Realm.Configuration( 
      schemaVersion: 1,
      migrationBlock: { migration, oldSchemaVersion in }
    )
    

    您还可以通过调用schemaVersionAtURL(_:encryptionKey:) 函数来检查Realm 文件的当前schemaVersion 而无需打开它。这可以让您在打开 Realm 文件之前根据其架构版本选择如何处理它。

    Realm 架构的 description 用于调试目的,从未打算将其作为应用业务逻辑的一部分来依赖。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-23
      • 1970-01-01
      • 2013-03-26
      • 2023-03-10
      • 1970-01-01
      • 1970-01-01
      • 2015-09-28
      • 1970-01-01
      相关资源
      最近更新 更多