3

在我的模型中,我想迁移List<Item>该 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"]不附加但也无法使其正常工作。

有人能指出我正确的方向吗?

4

2 回答 2

4

这里的问题是您隐含地尝试将已经在另一个领域中管理的对象添加到列表中,这通常是不允许的。这里的另一个领域是这里的旧版本。

枚举模型时,您可以通过执行以下操作来解决该问题:

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)
    }
}
于 2016-06-02T10:00:58.070 回答
0

你可以试试下面的代码吗?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)
    }
})
于 2016-06-02T09:52:04.280 回答