2017-10-19 25 views
0

Realm 3.0 introduit la liste des types de primitives (String, Int, ...). Je souhaite migrer les anciennes listes d'objets personnalisés contenant une seule propriété d'un type primitif vers ces listes plus simples, mais je ne comprends pas comment pendant le bloc de migration de domaine.Migrer le domaine 2.x Liste des objets en domaine 3.x Liste des chaînes (ou autre type principal)

Ce que j'utilisé dans Realm 2.0 (simplifié):

class Map: Object { 
    let cities = List<City>() 
} 

class City: Object { 
    @objc dynamic var name: String = "" 

    override static func indexedProperties() -> [String] { 
    return ["name"] 
    } 
} 

Ce que je voudrais utiliser dans Realm 3.0:

class Map: Object { 
    let cities = List<String>() 

    override static func indexedProperties() -> [String] { 
    return ["cities"] 
    } 
} 

Comment effectuer la migration? Ce qui suit ne fonctionne pas.

if oldSchemaVersion < 2 { 
    migration.enumerateObjects(ofType: Map.className(), { (oldObject, newObject) in 
    newObject!["cities"] = oldObject!["cities"] as! List<String> 
    }) 
} 

Je ne sais pas sur l'utilisation de indexedProperties() aussi bien avec ces nouvelles listes.

Répondre

2

Vous devez convertir la liste des villes à une liste de chaînes:

if oldSchemaVersion < 2 { 
    migration.enumerateObjects(ofType: Map.className(), { (oldObject, newObject) in 
    newObject!["cities"] = (oldObject!["cities"] as! List<MigrationObject>).value(forKey: "name") 
    }) 
} 

indexation List propriétés ne sont pas pris en charge.