ios - 执行从一个列表到另一个列表的 Realm 迁移

标签 ios swift realm realm-migration

在我的模型中,我想迁移一个 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/

相关文章:

ios - 可以更新不在屏幕上的 UIViewController 吗?

ios - drawrect中的UIView动画

swift - 如何在 Swift MacOS 中获取按钮的 Action

ios - Swift 上的静态变量

ios - Swift:如何迁移自定义 Realm

swift2 - Realm Swift2 : Best practice for model and Realm model class separation

ios - Realm - 在后台线程上批量更新 RLMResults

ios - View 不在状态栏下方且状态栏为黑色

ios - UICollectionView 单元格中的 UIActivityIndi​​cator 随机不会隐藏

ios - 快速更改图像选择器首选状态栏样式