2016-06-01 31 views
2

In meinem Modell mag ich ein List<Item> wandern, wo das Element ein Produkt benutzerdefinierte Klasse hält wie:von einer Liste in einer anderen

class Item: Object { 

    dynamic var product: Product? 

} 

einfach ein List<Product>

ich verschiedene Dinge ausprobiert, aber nichts scheint wirklich zu funktionieren. Zum Beispiel so etwas wie diese:

let items = oldObject.dynamicList("items") 

for item in items { 
    let oldProduct = item["product"] as! MigrationObject 
    productList.append(oldProduct) 
} 

Dies führt zu einer Fehlermeldung, dass dieses Objekt bereits beibehalten wird.

Wenn ich ein neues Produkt im Migrationsblock erstelle, habe ich Objekte in meinem Realm dupliziert.

Ich habe auch versucht, direkt zu der Liste zuweisen wie: newObject!["products"] ohne anzufügen, aber auch konnte es nicht funktionieren.

Was ist die wirkliche Lösung für dieses Migrationsproblem, kann mir jemand in die richtige Richtung zeigen?

Antwort

0

Können Sie den Code wie folgt versuchen? Der Fehler "Objekt ist bereits vorhanden" ist aufgrund der Speicherung oldObject aufgetreten, denke ich.

Zuerst aufzählen Item Klasse zu sammeln Product Objekte. Dann erhalten Sie Product Objekt von newObject. Hängen Sie dann die Objekte an die List<Product> an.

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) 
    } 
}) 
0

Das hier Problem ist, dass man implizit zu Objekte hinzufügen versucht sind, die bereits in einem anderen Bereich der Liste verwaltet werden, was nicht erlaubt im Allgemeinen. Das andere Reich hier ist die alte vorherige Version hier.

Sie können das lösen, indem Sie die folgenden Schritte aus, wenn Sie über Ihr Modell aufzuzählen:

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) 
    } 
} 
Verwandte Themen