class Area: Object { // Specify properties to ignore (Realm won't persist these) // override static func ignoredProperties() -> [String] { // return [] // } dynamic var id = 0 dynamic var name = "" override static func primaryKey() -> String? { return "id" } } class Region: Object { // Specify properties to ignore (Realm won't persist these) // override static func ignoredProperties() -> [String] { // return [] // } dynamic var id = 0 dynamic var name = "" override static func primaryKey() -> String? { return "id" } }
我想将Region = List< Area>()添加到Region类和动态var区域:Region?到Area类,请问如何执行迁移块?因为迁移文档中的示例仅演示了原始类型.
解决方法
Alrighty.因此,当您想要在将模型添加到模型时预先填充区域时,您需要在迁移块中实现一些逻辑.
let migrationBlock: MigrationBlock = { migration,oldSchemaVersion in migration.enumerate(Region.className()) { oldobject,newObject in if oldSchemaVersion < 1 { let areas = newObject?["areas"] as? List<MigrationObject> // Add new objects to 'areas' as needed } } }
有一个some sample code显示了如何在Realm Swift的示例代码集合中处理迁移中的List对象
如果您将区域属性添加到Area的目标是这样,您可以找出此区域所属的Region对象,那么您不需要将其作为模型属性实现.相反,您可以使用linkedobjects(_:forProperty :)来让Realm代表您工作.
class Area: Object { dynamic var id = 0 dynamic var name = "" var regions: [Region] { return linkingObjects(Region.self,forProperty: "areas") } override static func primaryKey() -> String? { return "id" } }
为了确认我在评论中所说的内容,迁移是一条单向路径.它们不能降级到以前的架构版本.如果要在Realm文件上快速调试迁移过程,我建议将原始Realm文件放在一边并处理副本.
原始答案
您确实有任何想要添加到这些新属性的数据吗?由于它看起来不像,所以您不需要在迁移块中实现任何代码.
let config = Realm.Configuration( schemaVersion: 1,migrationBlock: { migration,oldSchemaVersion in }) Realm.Configuration.defaultConfiguration = config
虽然迁移块不能为零,但只需要在迁移过程中想要操作的旧Realm文件中的任何数据(即将其移动到另一个属性)中放入代码.如果您要添加全新属性,则无需在迁移块中对它们执行任何操作.
进入Realm迁移的思维模式需要一段时间,但幸运的是,一旦你做到了,你会发现它们比你想象的要容易.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。