Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 将属性Double更改为List的领域迁移中的强制转换错误<;CustomObject>;_Ios_Swift_Realm_Database Migration_Realm Migration - Fatal编程技术网

Ios 将属性Double更改为List的领域迁移中的强制转换错误<;CustomObject>;

Ios 将属性Double更改为List的领域迁移中的强制转换错误<;CustomObject>;,ios,swift,realm,database-migration,realm-migration,Ios,Swift,Realm,Database Migration,Realm Migration,我需要的是创建一个迁移,以便基于以下代码将discount:Double更改为discounts:List() 这是现有对象:这就是我的领域对象现在的样子。 以下是我如何尝试做出改变 新对象: 具有一对多关系的修改对象。 类项:对象{ @objc dynamic var itemName:String=“Some Name” 让折扣=列表() } 迁移 Realm.Configuration.defaultConfiguration=Realm.Configuration( 阴谋厌恶:3, m

我需要的是创建一个迁移,以便基于以下代码将
discount:Double
更改为
discounts:List()

这是现有对象:这就是我的
领域对象现在的样子。
以下是我如何尝试做出改变

新对象: 具有一对多关系的修改对象。
类项:对象{
@objc dynamic var itemName:String=“Some Name”
让折扣=列表()
}
迁移
Realm.Configuration.defaultConfiguration=Realm.Configuration(
阴谋厌恶:3,
migrationBlock:{migration,oldSchemaVersion in
if(oldschemaversation<3){
enumerateObjects(类型:Item.className()){oldObject,newObject in
将oldDiscount=oldObject![“折扣”]设为!双倍
让折扣=折扣()
折扣。金额=旧折扣
让折扣=新对象![“折扣”]作为!列表
折扣。附加(折扣)
}
}
})
我得到一个错误:

无法将
RealmSwift.List(0x1c8910068)
类型的值强制转换为
RealmSwift.List(0x1c890f6a0)


同样,问题是,我如何创建一个迁移来将
折扣:Double
更改为
折扣:List()

您可以将折扣属性迁移到新的折扣列表中,就像[oldDiscount]一样

这是密码。我重新命名了一些对象,使其更加清晰,因为重复使用“折扣”一词来指代类和属性是令人困惑的

let vers = UInt64(1)
let config = Realm.Configuration( schemaVersion: vers, migrationBlock: { migration, oldSchemaVersion in
     if (oldSchemaVersion < vers) {
         print("performing migration")
         migration.enumerateObjects(ofType: ItemClass.className()) { oldItem, newItem in
            let oldDiscount = oldItem!["discount"] as? Double ?? 0.0

            let d = DiscountClass()
            d.name = "Test"
            d.discount = oldDiscount

            newItem!["discountList"] = [d]
         }
     } else {
        print("no migration needed")
    }
 })
let-vers=UInt64(1)
让config=Realm.Configuration(schemaVersion:vers,migrationBlock:{migration,oldSchemaVersion in
if(oldSchemaVersion
class Discount: Object {
    @objc dynamic var name:String = "Discount Name"
    @objc dynamic var discount:Double = 0.0
}
class Item:Object{
    @objc dynamic var itemName:String = "Some Name"
    let discounts = List<Discount>()
}
    Realm.Configuration.defaultConfiguration = Realm.Configuration(
        schemaVersion: 3,
        migrationBlock: { migration, oldSchemaVersion in
            if (oldSchemaVersion < 3) {
                migration.enumerateObjects(ofType: Item.className()) { oldObject, newObject in

                    let oldDiscount = oldObject!["discount"] as! Double

                    let discount = Discount()
                    discount.amount = oldDiscount

                    let discounts = newObject!["discounts"] as! List<Discount>
                    discounts.append(discount)
            }
        }
    })
let vers = UInt64(1)
let config = Realm.Configuration( schemaVersion: vers, migrationBlock: { migration, oldSchemaVersion in
     if (oldSchemaVersion < vers) {
         print("performing migration")
         migration.enumerateObjects(ofType: ItemClass.className()) { oldItem, newItem in
            let oldDiscount = oldItem!["discount"] as? Double ?? 0.0

            let d = DiscountClass()
            d.name = "Test"
            d.discount = oldDiscount

            newItem!["discountList"] = [d]
         }
     } else {
        print("no migration needed")
    }
 })