2016-05-03 1 views
1

Я использую последнюю версию RealmSwift и столкнулся с фатальной ошибкой при выполнении серии линейных миграций.Проверка наличия свойства при выполнении линейной миграции в Realm

Проблема в том, что предыдущая миграция пыталась установить значение для свойства, которое было удалено в более поздней версии, а конкретная сборка, на которой выполнялись миграции, пропускала несколько версий. Есть ли метод на RealmSwift.DynamicObject, который можно использовать для того, чтобы исследовать существование свойства, прежде чем пытаться установить его значение?

ответ

4

RealmSwift.Object имеет свойство objectSchema, которое описывает схему, используемую для данного конкретного объекта. Вы можете использовать это, чтобы проверить наличие свойства с object.objectSchema.properties.contains { $0.name == "propName" }.

0
extension Migration { 
    func hadProperty(onType typeName: String, property propertyName: String) -> Bool { 
     var hasPropery = false 
     self.enumerateObjects(ofType: typeName) { (oldObject, _) in 
      hasPropery = oldObject?.objectSchema.properties.contains(where: { $0.name == propertyName }) ?? false 
      return 
     } 
     return hasPropery 
    } 

    func renamePropertyIfExists(onType typeName: String, from oldName: String, to newName: String) { 
     if (hadProperty(onType: typeName, property: oldName)) { 
      renameProperty(onType: typeName, from: oldName, to: newName) 
     } 
    } 
} 
Смежные вопросы