2016-12-13 55 views
1

當更新我的領域架構時,我重新配置了RealmMigration以添加新的類/字段,但是我忘記更新架構版本。當我更新應用程序時,我沒有遇到任何問題,但後來意識到我忘了更新架構版本,這是令人困惑的,因爲我現在意識到,在沒有我指定版本更改的情況下,領域更新了我的架構。即使架構版本從未更改過的領域遷移模式

因此,當我更新它時,我得到了類已經存在的異常,這更加令人困惑,因爲現在我不知道該如何設置我的模式版本 - 我更改了模式,但更改已經由RealmMigration對象,所以我不知道是否應該將它留在舊版本號中,導致沒有類已經存在異常,或將其更改爲正確的版本號,導致異常。

如果領域遇到領域遷移異常,領域是否有可能使用給定的RealmMigration對象執行遷移;即使架構版本從未更新過?

回答

1

讓我假設你的遷移代碼是:

RealmMigration migration = new RealmMigration() { 
    @Override 
    public void migrate(DynamicRealm realm, long oldVersion, long newVersion) { 
     RealmSchema schema = realm.getSchema(); 
     if (oldVersion == 0) { 
      schema.create("Person") 
       .addField("name", String.class) 
       .addField("age", int.class); 
      // forgot: oldVersion++; 
     } 
    } 
} 

不能使用的版本,以確定是否應該添加Person類或撞擊的版本。但你可以使用你知道如果Person存在,你將需要碰撞的版本。

RealmMigration migration = new RealmMigration() { 
    @Override 
    public void migrate(DynamicRealm realm, long oldVersion, long newVersion) { 
     RealmSchema schema = realm.getSchema(); 
     if (oldVersion == 0) { 
      if (schema.contains("Person)) { 
       oldVersion++; 
      } else { 
       schema.create("Person") 
        .addField("name", String.class) 
        .addField("age", int.class); 
       oldVersion++; 
      } 
     } 
    } 
} 
+0

即使架構版本未更改,是否打算讓領域更新架構? – shoe

+0

不適用於此。我們從來沒有把它看作是一個用例。 – geisshirt

0

如果您忘記更改數據庫版本,領域遷移將無法啓動並且不會損壞數據庫。只需寫入實際版本(即之前的-1,實際-2),並且正確的遷移腳本將自動啓動。