Я пытаюсь работать с одним из задокументированных методов переноса базы данных области и установки версии схемы. Тип кода, который я использую:
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
Это кажется довольно стандартным кодом и, похоже, используется другими. Тем не менее, что, кажется, сбивает меня с толку, так это то, что я инициализирую экземпляр Realm, из-за чего настройка схемы не устанавливается или не сохраняется.
с чем я борюсь, так это где установить следующий код:
let uiRealm = try! Realm()
- Если я помещу это в начало AppDelegate над @UIApplicationMain, оно будет инициализировано слишком рано.
- Если я создам файл контроллера, в котором я намерен вызвать функцию после миграции, и поставлю инициализатор вверху, он все равно не работает.
Если я поместил его в класс ViewController, как в приведенном ниже коде, я получаю сообщение об ошибке. Член экземпляра uiRealm не может использоваться для типа XYZViewController.
import UIKit import RealmSwift class XYZViewController: UITableViewController,UIPickerViewDataSource,UIPickerViewDelegate { let uiRealm = try! Realm() var scenarios = uiRealm.objects(Scenario).filter("isActive = true ") }
Итак, мой вопрос: есть ли какие-либо рекомендации о том, где инициализировать и как лучше всего мигрировать.