gpt4 book ai didi

cocoa-touch - 由于未命中 RLMRealm.setSchemaVersion block ,无法迁移到具有更新属性的新模式

转载 作者:行者123 更新时间:2023-11-28 07:11:14 25 4
gpt4 key购买 nike

我已将以下两个属性添加到我的 RLMObject 中,但我似乎无法按照文档更新它。这是我的属性:

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

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

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

当我在这个 block 中放置断点时,它们没有被击中。我的应用程序在 AppDelegate 的顶部崩溃并且从不执​​行迁移代码。当我删除这些属性时,应用程序打开得很好。如果我删除整个 Realm ,它也是固定的,但显然每次更改我的数据模型时这样做效率不高。

如有任何帮助,我们将不胜感激。谢谢!

最佳答案

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

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

编辑

由于您已经向 RLMObject 子类添加了两个属性,而 Realm 尚不支持可选字符串属性,因此您需要为 firstNamelastName 到迁移 block 中所有现有的 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"] = ""
}
}

})

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com