在Swift应用程序中,我在didFinishLaunchingWithOptions中设置默认的Realm配置,如下所示:
Realm.Configuration.defaultConfiguration = {
var config = Realm.Configuration.defaultConfiguration
config.deleteRealmIfMigrationNeeded = true
return config
}()
然后我在需要时以3种不同的方式创建新的Realm实例 - 阅读时:
let realm = try! Realm()
let users = realm.objects(User.self)
写作时:
let realm = try! Realm()
if let user = realm.object(ofType: User.self, forPrimaryKey: userId) {
try! realm.write {
user.name = name
}
}
并在模特中:
import Foundation
import RealmSwift
import ObjectMapper
final class User: Object, StaticMappable {
@objc dynamic var id = 0
@objc dynamic var name = ""
override static func primaryKey() -> String? {
return "id"
}
func mapping(map: Map) {
id <- map["id"]
name <- map["name"]
}
static func objectForMapping(map: Map) -> BaseMappable? {
let objectOptional = try? Realm().object(ofType: self, forMapping: map)
if let object = objectOptional {
return object
}
return nil
}
}
问题是,有时我在完全关闭中创建新的Realm实例时遇到此错误,这些实例关闭使用频繁:
致命错误:'试试!'表达式意外地引发了错误:错误 Domain = io.realm Code = 1“路径上的领域 '/var/mobile/Containers/Data/Application/...../Documents/default.realm' 已经使用不同的架构模式打开了。“ UserInfo = {NSLocalizedDescription =路径中的域 '/var/mobile/Containers/Data/Application/...../Documents/default.realm' 已经使用不同的架构模式打开。,错误代码= 1
如何调试和解决此问题?
答案 0 :(得分:1)
我必须确保在设置Realm之前设置Realm.Configuration.defaultConfiguration。在我的情况下,我是第一次做:让领域=尝试!在设置默认配置之前,在appDelegate中执行Realm()并执行一些数据导入任务。然后使用相同的机制从后台线程打开时失败。在调用let realm = try之前确保设置了默认配置! Realm()可以解决问题:现在可以在任何线程上打开。
答案 1 :(得分:0)
通过添加
解决了该问题 Realm.Configuration.defaultConfiguration = {
var config = Realm.Configuration.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 = 0
}
到app init上的Realm配置。