我想将一个属性从<local:UserControl1 />
更新为float
,但是没有关于此类迁移的具体文档。
只需更改类中的属性类型是否容易? 变化有些困难吗? (怎么样?) 或根本不可用?
虽然我的要求并不严格,因为我们可以擦除该数据列,甚至清除该类的所有行。
感谢。
答案 0 :(得分:1)
这很容易。
假设您的第一个架构版本如下所示:
// Models
class MyModel: Object {
dynamic var prop: Float = 0
}
// Usage
let configuration = Realm.Configuration(schemaVersion: 0)
let realm = try! Realm(configuration: configuration)
然后将属性从float更改为double,使模式版本更新,并将旧对象中的浮点数转换为新对象的双精度数:
// Models
class MyModel: Object {
dynamic var prop: Double = 0
}
// Usage
let configuration = Realm.Configuration(schemaVersion: 1, migrationBlock: { migration, _ in
migration.enumerate(MyModel.className()) { oldObject, newObject in
newObject!["prop"] = Double(oldObject!["prop"] as! Float)
}
})
let realm = try! Realm(configuration: configuration)
这些都记录在Realm's Migration docs。
中答案 1 :(得分:0)
将您的属性类型从float更改为double并运行
RLMRealmConfiguration *config = [RLMRealmConfiguration defaultConfiguration];
config.migrationBlock = ^(RLMMigration *migration, uint64_t oldSchemaVersion) {
if(oldSchemaVersion < 26) {
[migration enumerateObjects:TransformationParameters.className block:^(RLMObject * _Nullable oldObject, RLMObject * _Nullable newObject) {
newObject[@"translationX"] = @([oldObject[@"translationX"] doubleValue]);
}];
}
};
通过调用doubleValue