无法在Swift中进行领域迁移

时间:2018-08-02 19:41:35

标签: swift realm realm-migration

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

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 = ""
}

我已经实现了AppDelegate的迁移块didFinishLaunchingWithOptions方法。在这里:

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."

我在迁移区块中应该更改什么?

提前谢谢

1 个答案:

答案 0 :(得分:0)

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

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

schemaVersion: 3,