在我的模型中,我想迁移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)
}
这会导致错误,说明此对象已被保留。
如果我在迁移块中创建一个新产品,我的领域将会有重复的对象。
我还尝试直接分配到列表,例如:newObject!["products"]
,但没有追加,但也无法让它发挥作用。
迁移问题的真正解决方案是什么,有人能指出我正确的方向?
答案 0 :(得分:2)
这里的问题是您隐式尝试将已经在另一个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)
}
}
答案 1 :(得分:0)
您可以尝试以下代码吗?错误&#34;对象已经存在并且#34;我想是因为存储oldObject
而发生的。
首先,枚举Item
类以收集Product
个对象。然后从Product
获取newObject
个对象。然后将对象附加到List<Product>
。
let objectToHoldListOfItems = migration.create("...")
migration.enumerate("Item", { (oldObject, newObject) in
if let _ = oldObject, let newObject = newObject {
let product = newObject["product"] as! DynamicObject
let products = objectToHoldListOfItems["products"] as! List<DynamicObject>
products.append(product)
}
})