Swift 在迁移期间添加和删除Realm.Object

Swift 在迁移期间添加和删除Realm.Object,swift,migration,realm,Swift,Migration,Realm,我正在进行迁移,这需要从领域中删除对象,并用不同的类型替换它们 简而言之,我以前只有一个类型,现在正在创建层次结构,因此BaseItem现在需要是DerivedItem 我不确定实现这一目标的最佳方式 下面是我要尝试的: setSchemaVersion(kSchemaVersion, Realm.defaultPath, { migration, oldSchemaVersion in if oldSchemaVersion == 0 { let realm = Rea

我正在进行迁移,这需要从领域中删除对象,并用不同的类型替换它们

简而言之,我以前只有一个类型,现在正在创建层次结构,因此BaseItem现在需要是DerivedItem

我不确定实现这一目标的最佳方式

下面是我要尝试的:

setSchemaVersion(kSchemaVersion, Realm.defaultPath, { migration, oldSchemaVersion in
    if oldSchemaVersion == 0 {
        let realm = Realm()
        realm.write({ () -> Void in
            old = oldObject!    
            if old["type"] as! Int == 1 {
                let textItem = TextItem()
                textItem.text = old["text"] as! String
                copyBaseItemCommon(old, textItem)
                realm.add(textItem)
                realm.delete(newObject!)
     }
})
这些是添加和删除的方式吗

更新:

尝试此操作后,代码在第3行出现死锁:
let realm=realm()


有人知道这种迁移的技术是什么吗?

您使用的是更新的领域吗

根据文件

你应该这样做>>

 let realm = Realm()

 realm.write
{
 realm.add(theObject)
 realm.delete(theObject)
}

希望有帮助

下载领域时,您有一个示例项目。打开它,您将看到一个迁移演示

这是他们进行迁移的方式:

let migrationBlock: MigrationBlock = { migration, oldSchemaVersion in
    if oldSchemaVersion < 1 {
        migration.enumerate(Person.className()) { oldObject, newObject in
            if oldSchemaVersion < 1 {
                // combine name fields into a single field
                let firstName = oldObject!["firstName"] as! String
                let lastName = oldObject!["lastName"] as! String
                newObject?["fullName"] = "\(firstName) \(lastName)"
            }
        }
    }
}
setDefaultRealmSchemaVersion(1, migrationBlock)
/**
    Create an `Object` of type `className` in the Realm being migrated.

    :param: className The name of the `Object` class to create.
    :param: object    The object used to populate the object. This can be any key/value coding
                      compliant object, or a JSON object such as those returned from the methods in
                      `NSJSONSerialization`, or an `Array` with one object for each persisted
                      property. An exception will be thrown if any required properties are not
                      present and no default is set.

    :returns: The created object.
    */
func create(className: String, value: AnyObject = default) -> RealmSwift.MigrationObject

/**
    Delete an object from a Realm during a migration. This can be called within
    `enumerate(_:block:)`.

    :param: object Object to be deleted from the Realm being migrated.
    */
func delete(object: RealmSwift.MigrationObject)
在迁移块中使用它们,如下所示
migration.create(“TextItem”,oldObject!)


请记住,在迁移过程中,您使用的是
迁移
对象,而不是领域。

不幸的是,我发现在迁移过程中尝试更新领域会导致死锁。看来这是不可能的。谢谢!不知怎么的,我完全忘了看迁移类。