Я пытаюсь работать с одним из документированных методов миграции базы данных области и установки версии схемы. Тип кода, который я использую:Перенос области, где инициализировать
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, как в приведенном ниже коде, ошибка Instanc е член uiRealm не может быть использован по типу XYZViewController
import UIKit import RealmSwift class XYZViewController: UITableViewController,UIPickerViewDataSource,UIPickerViewDelegate { let uiRealm = try! Realm() var scenarios = uiRealm.objects(Scenario).filter("isActive = true ") }
Так что мой вопрос: есть ли какие-либо рекомендации о том, где инициализируется, и как лучше перенести.
Спасибо за это, так как я могу преобразовать следующее в ленивую инициализацию? scenarios = uiRealm.objects (Сценарий) .filter ("isActive = true"). Если я просто ставлю ленивый на фронт, я получаю сообщение об ошибке «Использование неразрешенного идентификатора uiRealm» –
Не стоит беспокоиться! Хм, есть ли причина, по которой вы не можете просто использовать 'Realm()' вместо uiRealm? – TiM
Привет, я обошел это, объявив var сценарии: Результаты! вверху, а затем инициализирует область в каждой функции. Снова я пытался сделать слишком много, как глобальный съедобный, и все это переместило в функции. –