Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/112.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 核心数据迁移-更改属性类型_Iphone_Ios_Core Data_Magicalrecord - Fatal编程技术网

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

Iphone 核心数据迁移-更改属性类型,iphone,ios,core-data,magicalrecord,Iphone,Ios,Core Data,Magicalrecord,我有一个使用核心数据持久存储的iOS应用程序。我有几个人在测试应用程序,需要对数据模型进行一些更改,特别是将属性的类型从“NSString”更改为“int16\t” 以下是我迄今为止所做的工作: 创建了一个新的模型版本 更改了属性类型 添加了一个映射模型(我不确定这里需要什么。我有一个自定义策略的OneEntityMapping) 已创建自定义策略(如下所列) 我正在使用MagicalRecord。正在执行迁移,但似乎正在清除数据库。我可以在本地读取SQLite文件,并可以看到表列的更改(但

我有一个使用核心数据持久存储的iOS应用程序。我有几个人在测试应用程序,需要对数据模型进行一些更改,特别是将属性的类型从“NSString”更改为“int16\t”

以下是我迄今为止所做的工作:

  • 创建了一个新的模型版本
  • 更改了属性类型
  • 添加了一个映射模型(我不确定这里需要什么。我有一个自定义策略的OneEntityMapping)
  • 已创建自定义策略(如下所列)
我正在使用MagicalRecord。正在执行迁移,但似乎正在清除数据库。我可以在本地读取SQLite文件,并可以看到表列的更改(但不是每次我清理、加载旧应用程序版本和执行迁移时都可以看到)

我怎样才能让这样的东西发挥作用?我希望动态读取字符串并计算正确的it值。现在我将其设置为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
见尼克·韦弗的答案