我已经向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的顶部崩溃,并且从不执行迁移代码。当我删除这些属性时,应用程序将很好地打开。如果我删除整个领域,它也会被修复,但是很明显,每次我更改数据模型时,这样做是不有效的。任何帮助都将不胜感激。谢谢您!

最佳答案

似乎您在调用RLMRealm.setSchemaVersion之前打开了域,这肯定会导致该异常。
如果您共享了didFinishLaunchingWithOptions方法的全部内容(假设这是您设置领域的地方),我们可以验证这一点。
编辑
由于您已经将两个属性添加到您的cc子类中,并且域还不支持可选的字符串属性,所以您需要为迁移块中的所有现有对象分配一个值,例如:

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

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

})

关于cocoa-touch - 由于未命中RLMRealm.setSchemaVersion块,因此无法迁移到具有更新属性的新架构,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28351335/

10-14 13:31
查看更多