RestKit - 实体映射属性转换

Posted

技术标签:

【中文标题】RestKit - 实体映射属性转换【英文标题】:RestKit - Entity Mapping Property transformation 【发布时间】:2013-05-27 09:53:07 【问题描述】:

我需要将对象属性全部大写的 Web 服务映射到 coredata 对象属性全部小写:

# JSON

    'ID': 'value',
    'TITLE': 'value',
    'BODY': 'value',

# CoreData Entity

    'id': 'value',
    'title': 'value',
    'body': 'value',

我通过以下方式映射了字段:

RKEntityMapping *entMap = [RKEntityMapping mappingForEntityForName:entName 
    inManagedObjectStore:managedObjectStore];
NSEntityDescription *entity = [[managedObjectModel entitiesByName] 
    objectForKey:entName];
[entMap addAttributeMappingsFromArray:[[[RKPropertyInspector sharedInspector]
    propertyInspectionForEntity:entity] allKeys]];

我在RKObjectMapping 中看到了这个方便的setDefaultSourceToDestinationKeyTransformationBlock 函数,允许在对象属性上定义自定义转换。这不适用于RKEntityMapping

如何在不手动定义字段的情况下使用RKEntityMapping 进行属性转换?

【问题讨论】:

【参考方案1】:

这是我目前的解决方法:

- (NSDictionary *)dictToArray:(NSArray *)array
    withTranformation:(NSString *(^)(NSString *))theBlock

    NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
    for (NSString *key in array) 
        dict[theBlock(key)] = key;
    
    return dict;


NSArray *fields = [[[RKPropertyInspector sharedInspector] 
    propertyInspectionForEntity:entity] allKeys];
NSDictionary *mapDict = [self dictToArray:fields
    withTranformation:^NSString *(NSString *str) 
        return [str uppercaseString];
    ];

[entMap addAttributeMappingsFromDictionary:mapDict];

【讨论】:

以上是关于RestKit - 实体映射属性转换的主要内容,如果未能解决你的问题,请参考以下文章

Restkit 属性映射失败的转换错误

RestKit 映射结果已填充,但未设置核心数据实体

Restkit/CoreData - 更新实体的属性不会更新 UITableView

如何使用 RestKit 指定关系?

参考 id 的 RestKit 映射对象

RestKit 实体映射