首页 文章

Random Realm 'already opened with a different schema mode'错误

提问于
浏览
1

在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 回答

  • 0

    在使用Realm做任何其他事情之前,我必须确保我正在设置Realm.Configuration.defaultConfiguration . 在我的情况下,我是第一次做:让领域=尝试!在设置默认配置之前,在appDelegate中执行Realm()并执行一些数据导入任务 . 然后使用相同的机制从后台线程打开时失败 . 在调用let realm = try之前确保设置了默认配置! Realm()可以解决问题:现在可以在任何线程上打开 .

  • 1

    通过添加一个问题解决了这个问题

    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配置 .

相关问题