领域Objective-c将模式从float更改为double

时间:2016-08-24 14:48:50

标签: objective-c realm

我想将一个属性从<local:UserControl1 />更新为float,但是没有关于此类迁移的具体文档。

只需更改类中的属性类型是否容易? 变化有些困难吗? (怎么样?) 或根本不可用?

虽然我的要求并不严格,因为我们可以擦除该数据列,甚至清除该类的所有行。

感谢。

2 个答案:

答案 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

执行从float到double的转换