核心数据迁移 - 更改属性类型

时间:2012-11-09 20:14:47

标签: iphone ios core-data magicalrecord

我有一个使用Core Data Persistent Store的iOS应用程序。我有一些人在测试应用程序,需要对数据模型进行一些更改,特别是将属性类型从“NSString”更改为“int16_t”。

这是我到目前为止所做的:

  • 创建了新的模型版本
  • 更改了属性类型
  • 添加了一个映射模型(我不确定我在这里需要什么。我有一个带有自定义策略的EntityMapping)
  • 创建自定义政策(如下所列)

我正在使用MagicalRecord。正在执行迁移,但似乎正在清除数据库。我能够在本地读取SQLite文件并且可以看到表列的更改(但不是每次我清理,加载旧的应用程序版本,并执行迁移)。

我怎样才能得到这样的东西?我想动态读取字符串并计算正确的值。现在我将它设置为1作为NSNumber。我不知道如何为int

创建有效的NSExpression

这是我的自定义政策:

@implementation MessageLabelMigration

- (BOOL)createDestinationInstancesForSourceInstance:(NSManagedObject *)instance
                                  entityMapping:(NSEntityMapping *)mapping
                                        manager:(NSMigrationManager *)manager
                                          error:(NSError **)error {
    NSArray *_properties = [mapping attributeMappings];
    NSLog(@"_properties: %@", _properties);

    for (NSPropertyMapping *_property in _properties) {
        if ([[_property name] isEqualToString:@"label"]) {
            NSExpression *_expression = [NSExpression expressionForConstantValue:[NSNumber numberWithUnsignedShort:1]];
            [_property setValueExpression:_expression];
        }
    }

    return [super createDestinationInstancesForSourceInstance:instance
                                            entityMapping:mapping
                                                  manager:manager
                                                    error:error];
}

@end

0 个答案:

没有答案