Миграция работает нормально, но в следующий раз приложение
перезапущен, текущая и старая версии схемы равны 0,
Это происходит, когда вы удаляете локальный файл Realm
и переустанавливаете его, обычно это происходит при удалении и переустановке приложения,
Realm
автоматически обрабатывает миграции, все, что нужно знать, если существует новый номер версии, который заставит файл переписать его самостоятельно с новыми правилами.
Теперь для сбойной части вы используете это, проблема с open stat на github
let version = try! schemaVersionAtURL(Realm.Configuration.defaultConfiguration.fileURL!)
Однако я согласен с этим комментарием.
Полагаю, здесь есть две проблемы:
1 - Похоже, schemaVersionAtURL()
создает пустой файл, если дано
URL для файла, который не существует, и он, очевидно, не должен быть
делать это.
2- В Swift schemaVersionAtURL()
должно быть UInt64?
и просто
верните ноль, если файл не существует, а не выбрасывает
Я рекомендую использовать обычную Int
для версии, а не получать ее из файла,
как показано в Realm
документах , schemaVersion: 1
, и увеличивать его вручную, это позволит вам всегда видеть, на каком номере версии вы находитесь, и при сбое вы знаете, что сделали что-то достойное для миграции.
Теперь о той части, где вы говорите.
текущей и старой версиями схемы являются 0
Когда вы переустанавливаете свое приложение, оно просто воссоздает файл с версией 0, потому что новые правила, которые ваш код реализовал для Realm
, это просто простой новый файл, так что установка более низкой версии кода в коде не будет иметь большого значения, однако это не так. рекомендуется, потому что, когда вы выходите в эфир, люди не будут переустанавливать приложение, они будут обновлять его, поэтому файл Realm
переносится в старшую версию, однако новые пользователи, загружающие приложение с номером версии 0
, поэтому следует думать об этом как о изменение должно быть сделано вместо числа приращения, только чем больше, тем лучше .