Написать код миграции в методе AppDelegate disFinishLaunchWithOptions
.
Пожалуйста, обратитесь ниже ссылки:
realm.io официальные документы
Локальные миграции:
Локальные миграции определяются настройкой
Realm.Configuration.schemaVersion и
Realm.Configuration.migrationBlock. Ваш блок миграции предоставляет все
логика преобразования моделей данных из предыдущих схем в новые
схемы. При создании области с этой конфигурацией, миграция
будет применен блок для обновления области до указанной версии схемы
если необходима миграция.
Предположим, мы хотим перенести модель Person, объявленную ранее.
минимально необходимый блок миграции будет следующим:
// Inside your application(application:didFinishLaunchingWithOptions:)
let config = Realm.Configuration(
// Set the new schema version. This must be greater than the previously used
// version (if you've never set a schema version before, the version is 0).
schemaVersion: 1,
// Set the block which will be called automatically when opening a Realm with
// a schema version lower than the one set above
migrationBlock: { migration, oldSchemaVersion in
// We haven’t migrated anything yet, so oldSchemaVersion == 0
if (oldSchemaVersion < 1) {
// Nothing to do!
// Realm will automatically detect new properties and removed properties
// And will update the schema on disk automatically
}
})
// Tell Realm to use this new configuration object for the default Realm
Realm.Configuration.defaultConfiguration = config
// Now that we've told Realm how to handle the schema change, opening the file
// will automatically perform the migration
let realm = try! Realm()
Обновление:
realm.io официальные документы уже вся предоставленная информация, необходимая для миграции.
Местные миграции
Если вы хотите добавить новое свойство только тогда, приведенный выше код будет работать для
вы. Не нужно перебирать все записи. Старая запись сохраняет свои значения по умолчанию
значение в соответствующей строке.
Обновление значений
Если вы хотите добавить новое свойство, используя существующее значение столбца. Вы
нужно перебрать все записи. Пожалуйста, обратитесь ниже код.
// Inside your application(application:didFinishLaunchingWithOptions:)
Realm.Configuration.defaultConfiguration = Realm.Configuration(
schemaVersion: 1,
migrationBlock: { migration, oldSchemaVersion in
if (oldSchemaVersion < 1) {
// The enumerateObjects(ofType:_:) method iterates
// over every Person object stored in the Realm file
migration.enumerateObjects(ofType: Person.className()) { oldObject, newObject in
// combine name fields into a single field
let firstName = oldObject!["firstName"] as! String
let lastName = oldObject!["lastName"] as! String
newObject!["fullName"] = "\(firstName) \(lastName)"
}
}
})
Переименование свойств
Если вы хотите просто переименовать свойство, используйте приведенный ниже код.
// Inside your application(application:didFinishLaunchingWithOptions:)
Realm.Configuration.defaultConfiguration = Realm.Configuration(
schemaVersion: 1,
migrationBlock: { migration, oldSchemaVersion in
// We haven’t migrated anything yet, so oldSchemaVersion == 0
if (oldSchemaVersion < 1) {
// The renaming operation should be done outside of calls to `enumerateObjects(ofType: _:)`.
migration.renameProperty(onType: Person.className(), from: "yearsSinceBirth", to: "age")
}
})