首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Restkit动态属性映射

Restkit动态属性映射
EN

Stack Overflow用户
提问于 2013-10-11 01:36:48
回答 1查看 1.9K关注 0票数 0

我正在使用RestKit v0.21,并试图用动态名称映射一个值数组。我能够正确地获取自定义字段的名称,但无法捕获相关的值。JSON看起来如下所示:

代码语言:javascript
复制
{
    "id": 1,
    "firstName": "Kenny",
    "lastName": "Powers",
    "customFields": {
        "favorite color": "blue",
        "hometown": "Cleveland",
        "spouse name": "sally"
    }
}

我的映射如下所示:

代码语言:javascript
复制
//PERSON MAPPING
RKEntityMapping *personMapping = [RKEntityMapping mappingForEntityForName:@"Person" inManagedObjectStore:[RKManagedObjectStore defaultStore]];
[personMapping addAttributeMappingsFromDictionary:@{
                                                     @"id":             @"personId",
                                                     @"firstName":      @"firstName",
                                                     @"lastName":       @"lastName"}];
personMapping.identificationAttributes = @[ @"personId" ];

//CUSTOM FIELD MAPPING
RKEntityMapping *customFieldMapping = [RKEntityMapping mappingForEntityForName:@"CustomValue" inManagedObjectStore:[RKManagedObjectStore defaultStore]];
customFieldMapping.forceCollectionMapping = YES;
[customFieldMapping addAttributeMappingFromKeyOfRepresentationToAttribute:@"fieldName"];
[customFieldMapping addPropertyMapping:[RKAttributeMapping attributeMappingFromKeyPath:@"(fieldName)" toKeyPath:@"fieldValue"]];

[personMapping addPropertyMapping:[RKRelationshipMapping relationshipMappingFromKeyPath:@"customFields"
                                                                             toKeyPath:@"customValues"
                                                                           withMapping:customFieldMapping]];

我在动态属性中看到的所有示例都涉及一个值对象,其中的值映射将类似于"(fileName).email“。在我的例子中,它总是一个字符串:名称和值的字符串集合,它们代表一组完全动态的自定义字段和伴随的值。

当我检查自定义字段对象的集合时,设置了fieldName属性,但fieldValue属性全部为(null)。

有什么想法吗?

更新:以下是定制字段数组中元素的映射之一的日志输出:

代码语言:javascript
复制
2013-10-11 09:54:45.558 MyMobile[45460:6207] D restkit.object_mapping:RKMappingOperation.m:851 Starting mapping operation...
2013-10-11 09:54:45.558 MyMobile[45460:6207] T restkit.object_mapping:RKMappingOperation.m:852 Performing mapping operation: <RKMappingOperation 0x17a71230> for 'CustomValue' object. Mapping values from object {
    "Youtube Link" = "http://www.youtube.com";
} to object <CustomValue: 0xac42b00> (entity: CustomValue; id: 0xac69420 <x-coredata://D54F8070-D653-49E2-AFD5-90CD9778B2D4/CustomValue/p3> ; data: {
    fieldName = "Youtube Link";
    fieldValue = nil;
    person = "0x16f8d200 <x-coredata://D54F8070-D653-49E2-AFD5-90CD9778B2D4/Person/p389>";
}) with object mapping (null)
2013-10-11 09:54:45.559 MyMobile[45460:6207] D restkit.object_mapping:RKMappingOperation.m:813 Found nested mapping definition to attribute 'fieldName'
2013-10-11 09:54:45.560 MyMobile[45460:6207] D restkit.object_mapping:RKMappingOperation.m:816 Found nesting value of 'Youtube Link' for attribute 'fieldName'
2013-10-11 09:54:45.562 MyMobile[45460:6207] T restkit.object_mapping:RKMappingOperation.m:440 Mapping attribute value keyPath '<RK_NESTING_ATTRIBUTE>' to 'fieldName'
2013-10-11 09:54:45.562 MyMobile[45460:6207] T restkit.object_mapping:RKMappingOperation.m:429 Found transformable value at keyPath '<RK_NESTING_ATTRIBUTE>'. Transforming from class '__NSCFString' to 'NSString'
2013-10-11 09:54:45.563 MyMobile[45460:6207] T restkit.object_mapping:RKMappingOperation.m:475 Skipped mapping of attribute value from keyPath '<RK_NESTING_ATTRIBUTE> to keyPath 'fieldName' -- value is unchanged (Youtube Link)
2013-10-11 09:54:45.564 MyMobile[45460:6207] T restkit.object_mapping:RKMappingOperation.m:497 Skipping attribute mapping for special keyPath '<RK_NESTING_ATTRIBUTE>'
2013-10-11 09:54:45.564 MyMobile[45460:6207] T restkit.object_mapping:RKMappingOperation.m:440 Mapping attribute value keyPath 'Youtube Link' to 'fieldValue'
2013-10-11 09:54:45.565 MyMobile[45460:6207] T restkit.object_mapping:RKMappingOperation.m:429 Found transformable value at keyPath 'Youtube Link'. Transforming from class '__NSCFString' to 'NSString'
2013-10-11 09:54:45.565 MyMobile[45460:6207] E restkit.object_mapping:RKMappingOperation.m:431 Failed transformation of value at keyPath 'Youtube Link' to representation of type 'NSString': (null)
2013-10-11 09:54:45.566 MyMobile[45460:6207] D restkit.object_mapping:RKMappingOperation.m:920 Finished mapping operation successfully...
EN

回答 1

Stack Overflow用户

发布于 2013-11-02 19:13:54

最近我遇到了一个类似的问题。在使用动态属性映射时,值转换器似乎没有被正确初始化。

通过将属性从NSString更改为在id子类中键入id,我找到了一个解决办法。例如,假设您的NSManagedObject通常如下所示:

代码语言:javascript
复制
@interface CustomValue : NSManagedObject

@property (nonatomic, retain) NSString * fieldValue;

@end

尝试将此更改为:

代码语言:javascript
复制
@interface CustomValue : NSManagedObject

@property (nonatomic, retain) id fieldValue;

@end

您还必须将数据模型中的fieldValueString更改为Transformable

在我这样做之后,映射仍然将类型转换为NSString,但是它是成功的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19308915

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档