2016-04-25 63 views
3

我正在嘗試爲我的模型文件中的某個屬性的數據類型進行遷移。Realm Property的數據類型遷移

我發現的信息來源主要是指導如何在列名稱發生變化或將列組合成一個列時進行遷移。

這裏是我編譯應用程序時得到的錯誤信息。

終止應用程序由於未捕獲的異常「RLMException」,原因是: 「遷移需要因下列錯誤: - 物業類型‘has_completed_profile’屬性不匹配。老「BOOL」類型,新型「詮釋」

,我使用的最新版本0.99.0

回答

6

首先,當你改變模型類的定義應該增加架構版本。

然後,如果您使用新數據架構保留舊數據,則應該將舊數據遷移到遷移塊內的新架構 。

例如:

// Schema version 0 
class TestObject: Object { 
    dynamic var name = "Test" 
    dynamic var has_completed_profile = false 
} 

// Schema version 1 
class TestObject: Object { 
    dynamic var name = "Test" 
    dynamic var has_completed_profile = 5 
} 

如果更改列時間BoolInt,和你想保留舊的數據,你應該寫遷移塊,如下所示:

let config = Realm.Configuration(schemaVersion: 1, migrationBlock: { (migration, oldSchemaVersion) in 
    if oldSchemaVersion < 1 { 
     migration.enumerate(TestObject.className(), { (oldObject, newObject) in 
      // Migrate old column to new column 
      // If there is no compatibility between two types 
      // (e.g. String to Int) 
      // you should also write converting the value. 
      newObject!["has_completed_profile"] = oldObject!["has_completed_profile"] 
     }) 
    } 
}) 
let realm = try! Realm(configuration: config) 
+0

這是一個有用的答案,但類別是針對Objective-C的。 –

+0

我使用領域0.99以及我輸入代碼時出現編譯器錯誤。看起來像Realm.Configuration不再以這種方式初始化。現在它期望更像這樣的東西:Realm.Configuration.init(path:,inMemoryIdentifier:,encryptionKey:,readOnly:,schemaVersion:,migrationBlock:,objectTypes:<[Object.Type]? >) –

+0

感謝回覆的人,並通過將其翻譯回Objective-C中來得到它的工作。 –