2017-05-10 80 views
0

我有一個關於在王國遷移問題。在一個捕獲數據庫版本0的應用程序中,更新完成後,所有事情都很好,但是,當應用程序完全安裝完成時,它會在重新打開時出現問題,因爲它會嘗試執行遷移到1.什麼是將是繼續處理這些案件的正確方法?我如何設置版本?遷移和境界數據庫版本

+0

是否乾淨安裝意味着所有的文件將被刪除?由於版本存儲在Realm中,這就像從頭開始。 – geisshirt

+0

準確地說,在新設備上進行安裝。問題是要通過遷移架構版本1.在將舊應用程序更新爲新的應用程序時,它的工作原理正常,但是如果安裝是在新設備中完成的,則需要再次打開應用程序並再次打開應用程序試圖再次實現移民。 –

+0

當應用程序獲得第一個實例時,將創建Realm文件。模式版本未定義,因此使用模型類,模式版本設置爲您在「RealmConfiguration」中指定的值(在您的案例中爲1)。下次該應用程序啓動時,磁盤上和配置中的版本相同,且不執行遷移。您是否在您的配置中設置了模式版本? – geisshirt

回答

0

在您需要之前驗證oldVersion遷移類,然後開始遷移,只有當它真的有必要。

// Example migration adding a new class 
RealmMigration migration = new RealmMigration() { 
    @Override 
    public void migrate(DynamicRealm realm, long oldVersion, long newVersion) { 

    // DynamicRealm exposes an editable schema 
    RealmSchema schema = realm.getSchema(); 

    // Migrate to version 1 
    if (oldVersion == 0) { 
     schema.create("Person") 
      .addField("name", String.class) 
      .addField("age", int.class); 
     oldVersion++; 
    } 

    // Migrate to version 2: Add a primary key + object references 
    // Example: 
    if (oldVersion == 1) { 
     schema.get("Person") 
      .addField("id", long.class, FieldAttribute.PRIMARY_KEY) 
      .addRealmObjectField("favoriteDog", schema.get("Dog")) 
      .addRealmListField("dogs", schema.get("Dog")); 
     oldVersion++; 
    } 
    } 
} 

Realm Migration example