在我的模型中,我想迁移一个 List<Item>
该项目包含自定义类产品的位置,例如:
class Item: Object {
dynamic var product: Product?
}
只是一个List<Product>
我尝试了不同的方法,但似乎没有任何效果。 例如这样的事情:
let items = oldObject.dynamicList("items")
for item in items {
let oldProduct = item["product"] as! MigrationObject
productList.append(oldProduct)
}
这会导致一个错误,指出该对象已被持久化。
如果我在迁移 block 中创建一个新产品,我的 Realm 中将有重复的对象。
我也试过直接分配给列表,如:newObject!["products"]
没有附加但也无法让它工作。
迁移问题的真正解决方案是什么,有人可以指出正确的方向吗?
最佳答案
这里的问题是您正在隐式地尝试将已在另一个 Realm 中管理的对象添加到列表中,这通常是不允许的。这里的另一个 Realm 是这里的旧版本。
您可以在枚举模型时通过执行以下操作来解决此问题:
migration.enumerate("ObjectWithProductsList") { (oldObject, newObject) in
let productList = newObject.dynamicList("products")
let items = oldObject.dynamicList("items")
let newRealm = newObject.realm
for item in items {
let oldProduct = item["product"] as! MigrationObject
let newProduct = newRealm.objects(Product).where("id = %@", oldProduct["id"])
productList.append(newProduct)
}
}
关于ios - 执行从一个列表到另一个列表的 Realm 迁移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37566946/