由于未触发RLMRealm.setSchemaVersion块,无法迁移到具有更新属性的新架构

时间:2015-02-05 18:25:20

标签: cocoa-touch swift realm

我已将以下两个属性添加到我的RLMObject中,我似乎无法通过遵循文档来更新它。这是我的属性:

dynamic var firstName = ""
dynamic var lastName = ""

以下是我的AppDelegate中的迁移逻辑(包含在didFinishLaunchingWithOptions中),据我所知,应该将这些属性添加到域文件中:

RLMRealm.setSchemaVersion(1, forRealmAtPath: RLMRealm.defaultRealmPath(), withMigrationBlock: { migration, oldSchemaVersion in

        if oldSchemaVersion < 1 {

        }

})

和抛出的异常:

'RLMException', reason: 'Migration is required for object type 'FilteredAccount' due to the following errors:
- Property 'firstName' has been added to latest object model.
- Property 'lastName' has been added to latest object model.'

当我在此区块中放置断点时,它们不会被击中。我的应用程序崩溃在AppDelegate的顶部,从不执行迁移代码。当我删除这些属性时,应用程序打开就好了。如果我删除整个领域,它也是固定的,但显然每次我更改数据模型时效率都不高。

非常感谢任何帮助。谢谢!

1 个答案:

答案 0 :(得分:1)

在调用RLMRealm.setSchemaVersion之前,您似乎正在打开领域,这肯定会导致异常。

如果您分享了didFinishLaunchingWithOptions方法的全部内容(假设您设置了自己的领域),我们可以验证这一点。

修改

由于您已向RLMObject子类添加了两个属性,并且Realm尚不支持可选字符串属性,因此您需要为所有字符都指定firstNamelastName的值迁移块中现有的FilteredAccount个对象,如下所示:

RLMRealm.setSchemaVersion(1, forRealmAtPath: RLMRealm.defaultRealmPath(), withMigrationBlock: { migration, oldSchemaVersion in

        if oldSchemaVersion < 1 {
              migration.enumerateObjects(FilteredAccount.className()) { oldObject, newObject in
                    newObject["firstName"] = ""
                    newObject["lastName"] = ""
              }
        }

})