Миграция локальной области не работает Swift

Я не знаю, если я что-то пропустил здесь.

У меня произошел сбой после запуска приложения без блока миграции после обновления свойства (та же проблема, что и здесь Миграция области не работает)

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

Я обновил приведенный ниже объект ("minReps" - это тот, который я добавил):

class ExerciseGeneratorObject: Object {
    @objc dynamic var name = ""
    @objc dynamic var minReps = 0
    @objc dynamic var maxReps = 0

    convenience init(name: String, minReps: Int, maxReps: Int) {
        self.init()
        self.name = name
        self.minReps = minReps
        self.maxReps = maxReps
    }

Затем я запускаю пустой блок миграции, подобный этому, в appDelegate:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

    let config = Realm.Configuration(

        schemaVersion: 3,

        migrationBlock: { migration, oldSchemaVersion in

            if (oldSchemaVersion < 3) {

            }
    })

    Realm.Configuration.defaultConfiguration = config

    let realm = try! Realm()

Я думал, что Realm предназначен для автоматического обновления свойств объекта, если вы запускаете пустой блок миграции — это неправильно? Мне не хватает кода, чтобы это работало?

Здесь есть очень похожая проблема (Миграции областей в Swift) (это не я!) но сейчас выглядит устаревшим (и, конечно, я пробовал решения, как указано выше!)


person nc14    schedule 09.05.2018    source источник
comment
пожалуйста, добавьте свой журнал сбоев   -  person a.masri    schedule 09.05.2018


Ответы (1)


Текущая версия схемы должна быть установлена ​​в приложении через конфигурацию области, и вы должны увеличить ее, в своем коде вы устанавливаете версию схемы на 3 и просите область перенести область, если oldSchemaVersion меньше 3, установите версию схемы на 4, и она будет Работа

    var 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: 4,

        // 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 < 3) {
                // Nothing to do!
                // Realm will automatically detect new properties and removed properties
                // And will update the schema on disk automatically
            }
    })

    Realm.Configuration.defaultConfiguration = config
    config = Realm.Configuration()
    config.deleteRealmIfMigrationNeeded = true
person A.Munzer    schedule 09.05.2018
comment
Я попробовал это в своем делегате приложения и снова изменил схему, но она все еще не работает - есть ли способ проверить текущую версию схемы? Интересно, я случайно не изменил это где-то? правильно ли я использую let realm = try! Realm() на каждой странице, которую я использую? - person nc14; 09.05.2018
comment
это сработало отлично, спасибо - очевидно, мне не хватало бита удаления области! - person nc14; 09.05.2018