У меня есть приложение, которое использует Realm
, в настоящее время оно имеет две разные миграции, и я работаю над третьей, но по какой-то причине эта новая миграция ведет себя странно. Насколько я понимаю, миграции состоят в том, что новые будут работать только в том случае, если предыдущая версия схемы уже существует, в противном случае они будут проигнорированы, и схема будет создана на основе структуры модели.
Вот что я вижу.
Сценарий 1: РАБОТАЕТ ТОЧНО.
Если приложение было предварительно установлено, все работает нормально, запускается новая миграция 3, и она делает все, что должна, данные преобразуются успешно, и все работает в порядке, как и ожидалось.
Сценарий 2: ОШИБКА.
Если приложение устанавливается впервые и пользователь начинает добавлять данные, как только приложение запускается, приложение выполнит sh при следующем запуске приложения (второй раз вызывается AppDelegate). Я поместил оператор печати, и похоже, что миграция 3 запускается при втором запуске приложения, но не при первом запуске.
Сценарий 3: РАБОТАЕТ ХОРОШО после взлома.
Если приложение устанавливается впервые, но на этот раз пользователь не сразу вводит какие-либо данные, вместо этого он / она убивает приложение и затем перезапускает приложение, все работает нормально, без ошибок и ввода данных без проблем.
Другими словами, похоже, что миграция 3 пытается запустить второй раз, когда приложение запускается, и это происходит, когда возникает ошибка, поскольку база данных уже имеет правильную структуру схемы с первого запуска.
Сценарий ошибки 2:
libc ++ abi.dylib: завершение с необработанным исключением типа NSException
Любая идея, почему миграция 3 запускается при втором запуске на новом устанавливает? Это не похоже на нормальное поведение, почему оно запускается во второй раз, а не при первом запуске.
Есть мысли?
class AppDelegate: UIResponder, UIApplicationDelegate {
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
/// Migration 1:
Realm.Configuration.defaultConfiguration = Realm.Configuration(
schemaVersion: 1,
migrationBlock: { migration, oldSchemaVersion in
if (oldSchemaVersion < 1) {
// configuration for schema 1
}
})
/// Migration 2:
Realm.Configuration.defaultConfiguration = Realm.Configuration(
schemaVersion: 2,
migrationBlock: { migration, oldSchemaVersion in
if (oldSchemaVersion < 2) {
// configuration for schema 2
}
})
/// Migration 3:
Realm.Configuration.defaultConfiguration = Realm.Configuration(
schemaVersion: 3,
migrationBlock: { migration, oldSchemaVersion in
if (oldSchemaVersion < 3) {
// configuration for schema 3
}
})
}
}
К вашему сведению - у меня есть печать в каждая миграция и только миграция 3 запускаются при втором запуске приложения после его первой установки.