加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

swift – 通过添加List()和另一个模型类来执行迁移

发布时间:2020-12-14 04:30:48 所属栏目:百科 来源:网络整理
导读:我有以下型号 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()
我有以下型号

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文件放在一边并处理副本.

原始答案

您确实有任何想要添加到这些新属性的数据吗?由于它看起来不像,所以您不需要在迁移块中实现任何代码.

只需增加Realm架构版本号,并提供一个空的迁移块.

let config = Realm.Configuration(
    schemaVersion: 1,migrationBlock: { migration,oldSchemaVersion in  

})

Realm.Configuration.defaultConfiguration = config

虽然迁移块不能为零,但只需要在迁移过程中想要操作的旧Realm文件中的任何数据(即将其移动到另一个属性)中放入代码.如果您要添加全新属性,则无需在迁移块中对它们执行任何操作.

进入Realm迁移的思维模式需要一段时间,但幸运的是,一旦你做到了,你会发现它们比你想象的要容易.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读