2016-07-04 4 views
9

Я просто тестирую некоторые конфигурации с помощью Realm, и поэтому я добавил и удалил переменные и списки из своих классов областей. Поскольку я просто тестирую, я не хочу проходить процесс миграции - у меня также нет данных, которые выполняются для обеспечения непрерывности.Как избежать миграции в RealmSwift

Есть ли способ обойти миграцию, запрашиваемую автоматически Realm?

ответ

19

Существует два способа пропустить ошибку миграции независимо от изменений схемы.

  1. deleteRealmIfMigrationNeeded Недвижимость. Если это true, воссоздайте файл Realm с предоставленной схемой, если требуется миграция.

    let config = Realm.Configuration(deleteRealmIfMigrationNeeded: true) 
    Realm.Configuration.defaultConfiguration = config 
    
    let realm = try! Realm() 
    ... 
    

  2. Increment схемы версии каждый запуск. У Realm есть функция автоматической миграции. Если вам не нужно переносить существующие данные, вы можете просто увеличить версию схемы. Схема будет автоматически изменена Realm.

    let config = Realm.Configuration(schemaVersion: try! schemaVersionAtURL(Realm.Configuration.defaultConfiguration.fileURL!) + 1) 
    Realm.Configuration.defaultConfiguration = config 
    
    let realm = try! Realm() 
    ... 
    
+0

Большой материал. Я разрешил realm = попробовать! Realm(), определенный перед viewDidLoad. Где я могу поместить ваш предложенный код для выполнения этой работы до сбоя приложения, потому что он попадает в определение области? – kangarooChris

+0

Мы рекомендуем поместить код в 'doneFinishLaunchingWithOptions' в AppDelegate. Если вы положите 'let realm = try! Realm() 'в качестве переменной-члена ViewController, которая вызывается до' didFinishLaunchingWithOptions'. Так что это должно быть 'lazy var realm = try! Realm() ' –

+0

Я тестировал оба решения и работаю. Большое спасибо. – kangarooChris

8

В Swift 3

миграции в Realm может быть легко избежать путем размещения этого кода в методе "didFinishLaunchingWithOptions" в классе AppDelegate.

var config = Realm.Configuration() 
config.deleteRealmIfMigrationNeeded = true 
Realm.Configuration.defaultConfiguration = config 

Это удалит базу данных царства, если требуется перенастройка с новой настройкой.

+0

Работал как очарование для меня! Благодаря! – mourodrigo

+0

Но вы потеряете данные? – Eenvincible

+0

да он удалит область хранения и добавит новую. –

0

Swift 4

var config = Realm.Configuration() 
config.deleteRealmIfMigrationNeeded = true 
Realm.Configuration.defaultConfiguration = config