Fatal Error :Can't open realm
Fatal Error :Can't open realm
我正在研究 IOS。我在前端使用 realm 数据库。它工作正常,直到我对领域模型和所有相关文件进行了一些更改。我只是在这些文件中添加了一个字段。
现在我在下面的代码中得到一个错误"Fatal error: Can't open realm"
fileprivate func getRealm() -> Realm {
// get default configuration realm
do {
return try Realm()
} catch {
Swift.fatalError("Can't open realm") //Fatal Error :Can't open realm
}
}
任何人都可以告诉这个错误的可能原因是什么。
提前致谢。
如果您对领域模型进行了更改,则需要增加架构版本,并且您可能需要提供迁移块。 See 官方文档了解详情。
// Inside your [AppDelegate didFinishLaunchingWithOptions:]
RLMRealmConfiguration *config = [RLMRealmConfiguration defaultConfiguration];
// Set the new schema version. This must be greater than the previously used
// version (if you've never set a schema version before, the version is 0).
config.schemaVersion = 1;
// Set the block which will be called automatically when opening a Realm with a
// schema version lower than the one set above
config.migrationBlock = ^(RLMMigration *migration, uint64_t oldSchemaVersion) {
// We haven’t migrated anything yet, so oldSchemaVersion == 0
if (oldSchemaVersion < 1) {
// Nothing to do!
// Realm will automatically detect new properties and removed properties
// And will update the schema on disk automatically
}
};
// Tell Realm to use this new configuration object for the default Realm
[RLMRealmConfiguration setDefaultConfiguration:config];
// Now that we've told Realm how to handle the schema change, opening the file
// will automatically perform the migration
[RLMRealm defaultRealm];
以上问题是由于Realm数据库不一致造成的。我通过添加一个字段来更改模型的结构。因此,该模型有 10 个字段,但我的应用程序中的领域数据库有 9 个字段,因为该应用程序是在更改之前构建的。
我通过重新安装在 phone 中重新生成领域数据库的应用程序解决了这个问题,从而拥有一致的模型和数据库。
如果您的应用尚未上线,上述解决方法可能会很好。但是,如果您的应用已被其他用户使用,那么他们将不得不在更新时重新安装应用,这可能会导致用户体验不佳。
理想情况下,您应该为新更改编写一个迁移块。
希望大家清楚。
我正在研究 IOS。我在前端使用 realm 数据库。它工作正常,直到我对领域模型和所有相关文件进行了一些更改。我只是在这些文件中添加了一个字段。
现在我在下面的代码中得到一个错误"Fatal error: Can't open realm"
fileprivate func getRealm() -> Realm {
// get default configuration realm
do {
return try Realm()
} catch {
Swift.fatalError("Can't open realm") //Fatal Error :Can't open realm
}
}
任何人都可以告诉这个错误的可能原因是什么。 提前致谢。
如果您对领域模型进行了更改,则需要增加架构版本,并且您可能需要提供迁移块。 See 官方文档了解详情。
// Inside your [AppDelegate didFinishLaunchingWithOptions:]
RLMRealmConfiguration *config = [RLMRealmConfiguration defaultConfiguration];
// Set the new schema version. This must be greater than the previously used
// version (if you've never set a schema version before, the version is 0).
config.schemaVersion = 1;
// Set the block which will be called automatically when opening a Realm with a
// schema version lower than the one set above
config.migrationBlock = ^(RLMMigration *migration, uint64_t oldSchemaVersion) {
// We haven’t migrated anything yet, so oldSchemaVersion == 0
if (oldSchemaVersion < 1) {
// Nothing to do!
// Realm will automatically detect new properties and removed properties
// And will update the schema on disk automatically
}
};
// Tell Realm to use this new configuration object for the default Realm
[RLMRealmConfiguration setDefaultConfiguration:config];
// Now that we've told Realm how to handle the schema change, opening the file
// will automatically perform the migration
[RLMRealm defaultRealm];
以上问题是由于Realm数据库不一致造成的。我通过添加一个字段来更改模型的结构。因此,该模型有 10 个字段,但我的应用程序中的领域数据库有 9 个字段,因为该应用程序是在更改之前构建的。
我通过重新安装在 phone 中重新生成领域数据库的应用程序解决了这个问题,从而拥有一致的模型和数据库。
如果您的应用尚未上线,上述解决方法可能会很好。但是,如果您的应用已被其他用户使用,那么他们将不得不在更新时重新安装应用,这可能会导致用户体验不佳。
理想情况下,您应该为新更改编写一个迁移块。 希望大家清楚。