在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
我该如何调试和解决这个问题?
2 回答
在使用Realm做任何其他事情之前,我必须确保我正在设置Realm.Configuration.defaultConfiguration . 在我的情况下,我是第一次做:让领域=尝试!在设置默认配置之前,在appDelegate中执行Realm()并执行一些数据导入任务 . 然后使用相同的机制从后台线程打开时失败 . 在调用let realm = try之前确保设置了默认配置! Realm()可以解决问题:现在可以在任何线程上打开 .
通过添加一个问题解决了这个问题
到app init上的Realm配置 .