首页 > 解决方案 > 无法在 Swift 中进行领域迁移

问题描述

我有一个提醒对象,我刚刚修改过。这是原始版本:

class Reminder: Object {
   @objc dynamic var title = ""
   @objc dynamic var parents = ""
   @objc dynamic var lists = "All"
   @objc dynamic var labels = "All"
   @objc dynamic var priority = 
   @objc dynamic var notes = ""
   @objc dynamic var reminderType = .none
}

这是新版本:

class Reminder: Object {
    @objc dynamic var title = ""
    @objc dynamic var parents = ""
    @objc dynamic var lists = "All"
    @objc dynamic var dueDate = 0.0
    @objc dynamic var reminderDate = 0.0
    @objc dynamic var reminderLocation = ""
    @objc dynamic var labels = "All"
    @objc dynamic var priority = 1
    @objc dynamic var notes = ""
}

我已经实现了didFinishLaunchingWithOptionsAppDelegate 的迁移块方法。这里是:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

    ///Realm migration
    let config = Realm.Configuration(
        // 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).
        schemaVersion: 2,

        // Set the block which will be called automatically when opening a Realm with
        // a schema version lower than the one set above
        migrationBlock: { migration, oldSchemaVersion in

            if oldSchemaVersion < 2 {

            }
    }
    )
    Realm.Configuration.defaultConfiguration = config
    let _ = try! Realm()

    return true
}

根据文档,我认为应该是功能迁移。但是,在编译应用程序时出现以下错误:

Fatal error: 'try!' expression unexpectedly raised an error: Error Domain=io.realm Code=10 "Migration is required due to the following errors:
- Property 'Reminder.reminderLocation' has been added.
- Property 'Reminder.reminderDate' has been added.
- Property 'Reminder.dueDate' has been added.
- Property 'Reminder.reminderType' has been removed."

我应该在迁移块中进行哪些更改?

先感谢您

标签: swiftrealmrealm-migration

解决方案


当存储的数据与代码中的模型不匹配时,将引发此异常。

您不需要在迁移块中执行任何操作,但是您需要通过更新 的值来触发迁移Realm.Configuration.schemaVersion,例如:

schemaVersion: 3,

推荐阅读