2016-04-15 3 views
0

Есть ли способ использования RealmBrowser или кода для переопределения версии базы данных Realm, если я нашел свою проблему в сложном состоянии из-за миграции?Переопределить версию схемы в базе данных Realm

мне нужно удалить таблицу со старой схемой из него, не знает, как это сделать

Я пытался принуждать предыдущую версию на config.schemaMigration написать собственный одноразовый миграционный блок, чтобы решить проблему, но Царство жалуется в начале. Есть ли способ заставить Realm открыть базу данных в любом случае, поэтому я решаю миграцию?

+0

Вам нужно будет предоставить конфигурацию 'Realm.getInstance()' метод, который указывает версию и миграцию, а версия должна быть выше текущей. – EpicPandaForce

ответ

0

Самым безопасным, безусловно, является ошибка версии схемы и устранение проблемы в новой версии. Выполнение любого другого способа имеет шанс разбить приложение для ваших пользователей.

Однако, если вы хотите, вы можете использовать наш динамический API, чтобы открыть Realm, не вызывая миграцию и внести изменения там: https://realm.io/docs/java/latest/#dynamic-realms

Тогда удаление любого класса осуществляется следующим образом:

DynamicRealm realm = DynamicRealm.getInstance(config); 
realm.beginTransaction(); 
realm.getSchema().remove("TableName"); 
realm.commitTransaction(); 
realm.close(); 
+0

Спасибо! есть ли эквивалент для Свифта? – oulipo

+0

в Swift вы можете выполнить миграцию с классом, удаленным из вашей схемы, и вызвать ['Migration.deleteData (_:)'] (https://realm.io/docs/swift/latest/api/Classes/Migration .html #/s: FC10RealmSwift9Migration10deleteDataFSSSb), чтобы полностью очистить этот класс от файла. Затем вы можете использовать ['Realm.writeCopyToPath (_: encryptionKey:)'] (https://realm.io/docs/swift/latest/api/Classes/Realm.html#/s:FC10RealmSwift5Realm15writeCopyToPathFzTSS13encryptionKeyGSqCSo6NSData__T_), который будет писать новый файл Realm со схемой версии '0'. Затем установите любую версию схемы для нового файла. – jpsim

Смежные вопросы