领域方案描述在模拟器和设备上不相同

时间:2017-01-11 12:45:56

标签: ios realm

在我们的应用程序中,我们使用静态域,我们可以在运行时加载和更新。为了识别Realm方案的正确版本,我们使用领域方案描述的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;
    }
}

有什么不同? “telefon”和“email”在真实设备上按顺序切换 - 当然会导致不同的md5哈希值。

所有设备上的描述不一致吗?

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

修改
我们在两个设备上使用相同版本的域。

1 个答案:

答案 0 :(得分:0)

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

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

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

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