首先,當你改變模型類的定義應該增加架構版本。
然後,如果您使用新數據架構保留舊數據,則應該將舊數據遷移到遷移塊內的新架構 。
例如:
// 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
}
如果更改列時間Bool
到Int
,和你想保留舊的數據,你應該寫遷移塊,如下所示:
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)
這是一個有用的答案,但類別是針對Objective-C的。 –
我使用領域0.99以及我輸入代碼時出現編譯器錯誤。看起來像Realm.Configuration不再以這種方式初始化。現在它期望更像這樣的東西:Realm.Configuration.init(path:,inMemoryIdentifier:,encryptionKey:,readOnly:,schemaVersion:,migrationBlock:,objectTypes:<[Object.Type]? >) –
感謝回覆的人,並通過將其翻譯回Objective-C中來得到它的工作。 –