在我们的应用程序中,我们使用静态域,我们可以在运行时加载和更新。为了识别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哈希值。
所有设备上的描述不一致吗?
识别领域方案的独特可靠方法是什么?
修改
我们在两个设备上使用相同版本的域。
答案 0 :(得分:0)
所有Realm文件都通过名为schemaVersion
的值跟踪其架构的版本控制。您可以通过递增Configuration
对象中的值来显式控制Realm所处的架构版本。增加它将触发迁移:
let config = Realm.Configuration(
schemaVersion: 1,
migrationBlock: { migration, oldSchemaVersion in }
)
您还可以通过调用schemaVersionAtURL(_:encryptionKey:)
函数来检查Realm文件的当前schemaVersion
,而无需打开它。这可以让您在打开Realm文件之前根据其架构版本选择如何处理它。
Realm架构的description
用于调试目的,并且从未打算作为应用程序业务逻辑的一部分依赖。