首页 文章

不称为境界迁移

提问于
浏览
5

我've added a value to a realm object (I'已将动态var inspectorName =“”添加到WeekReport对象中,并且我试图在 func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey : Any]? = nil) 中调用迁移块,如下所示:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    print("HERE")
    Realm.Configuration.defaultConfiguration = Realm.Configuration(
        schemaVersion: 1,
        migrationBlock: { migration, oldSchemaVersion in
            if (oldSchemaVersion < 1) {
                migration.enumerateObjects(ofType: WeekReport.className()) { oldObject, newObject in
                    newObject!["inspectorName"] = ""
                }
            }
    })

    return true
}

但似乎在我的错误发生之前没有调用 didFinishLaunchingWithOptions .

在多视图控制器中我有 let realm = try! Realm() . 我运行应用程序时Xcode中断了:

“由于以下错误,需要迁移: - 已添加属性'WeekReport.inspectorName' . ” UserInfo = {NSLocalizedDescription =由于以下错误而需要迁移: - 已添加属性'WeekReport.inspectorName' . ,错误代码= 10}:file /Library/Caches/com.apple.xbs/Sources/swiftlang/swiftlang- 800.0.63 / src目录/快捷/

How come the migration blick isn't called? "HERE"从未打印过......

我应该在视图控制器中以不同的方式定义领域吗?

5 回答

  • 0

    如果在视图控制器中将 let realm = try! Realm() 作为实例变量编写,则会在故事板中 application: didFinishLaunchingWithOptions 之前调用它 . 要解决此问题,您可以改用 lazy var realm = try! Realm() . lazy 推迟创建实例变量,直到访问该变量 .

  • 4

    在我的情况 schemaVersion: 1 ,是低,并且从未调用迁移块 . 确保您的新版本比以前更大 .

    这是我的第一次迁移,但我必须将其更改为 schemaVersion: 2 然后才开始工作 .

  • 1

    在多视图控制器中我让letm =试试!领域() .

    看起来你的一个视图控制器在 application: didFinishLaunchingWithOptions 之前创建了Realm,因此在那个时候没有设置带有迁移的默认配置 .

    确保在创建任何Realm实例之前配置 Realm.Configuration.defaultConfiguration .

  • 0

    在您的代码中,尝试调用:

    _ = try! Realm()
    

    之前:

    return true
    

    它对我有用!

  • 0

    似乎问题是迁移是异步调用,我们只能在迁移完成后访问Realm . 所以流程应该是第一个:设置配置 . 第二:使用Realm.asyncOpen强制Realm更新并阻止其他可能访问的东西!领域() . 你可以在这里找到更多细节:https://realm.io/docs/swift/latest/#asynchronously-opening-realms

相关问题