2016-04-25 3 views
3

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

Источники, которые я нашел, являются главным образом руководством о том, как переносить, если есть изменение имени столбца или объединить столбец в один.

И вот сообщение об ошибке, которое я получил при компиляции приложения.

Нагрузочного приложение из-за неперехваченное исключение «RLMException», причина: «Миграции требуется из-за следующие ошибки: - Типы недвижимости для„собственности has_completed_profile“не совпадает. Старый тип «BOOL», новый тип «INT»

И я использую последнюю версию 0.99.0

ответ

6

Во-первых, необходимо увеличивать версию схемы при изменении определения классов моделей.

Затем, если вы сохраните старые данные с новой схемой данных, вы должны перенести старые данные в новую схему в блок миграции.

Например:

// Schema version 0 
class TestObject: Object { 
    dynamic var name = "Test" 
    dynamic var has_completed_profile = false 
} 

// Schema version 1 
class TestObject: Object { 
    dynamic var name = "Test" 
    dynamic var has_completed_profile = 5 
} 

если изменить время столбца Bool к Int, и вы хотели бы сохранить старые данные, вы должны написать миграционный блок, как следующее:

let config = Realm.Configuration(schemaVersion: 1, migrationBlock: { (migration, oldSchemaVersion) in 
    if oldSchemaVersion < 1 { 
     migration.enumerate(TestObject.className(), { (oldObject, newObject) in 
      // Migrate old column to new column 
      // If there is no compatibility between two types 
      // (e.g. String to Int) 
      // you should also write converting the value. 
      newObject!["has_completed_profile"] = oldObject!["has_completed_profile"] 
     }) 
    } 
}) 
let realm = try! Realm(configuration: config) 
+0

Этот является полезным ответом, но категория была для Objective-C. –

+0

Я также использую realm 0.99, и я получаю ошибку компилятора при вводе этого кода. Кажется, что Realm.Configuration больше не инициализируется таким образом. Теперь он ожидает что-то еще вроде этого: Realm.Configuration.init (путь: , inMemoryIdentifier: , EncryptionKey: , ReadOnly: , schemaVersion: , migrationBlock: objectTypes: <[Object.Type]? >) –

+0

Спасибо за ответ человек и получил его, переведя его обратно в Objective-C. –

Смежные вопросы