ios Restkit - 将对象与另一个列表中的列表映射

标签 ios json object mapping restkit

我正在尝试使用 Restkit 映射对象。我在映射正常 JSON 响应时没有任何问题。在这种情况下,我遇到了问题,因为我想使用此配置映射响应:

{
    "id": 161,
    "text": "usertest",
    "test": {
        "id": "1",
        "beginDate": "17/04/2013",
        "expectedDuration": "45 minutes",
        "finishDate": "17/04/2013",
        "groups": [
            {
                "id": 71,
                "text": "some text",
                "number":"number"
            },
            {
                "id": 81,
                "text": "some anothertext
            }
        ]
        ...
}

如您所见,我有一个具有三个属性(id、文本和测试列表)的主对象。每个测试都有一些属性(id、beginDate、...、)。每个测试还有一个组列表。这是我的问题。当我尝试映射它时,restkit 无法映射“组”列表。

我用以下代码映射它:

//### TEST
RKEntityMapping *testCompleteMapping = [RKEntityMapping mappingForEntityForName:@"UserTest" inManagedObjectStore:managedObjectStore];
[testCompleteMapping addAttributeMappingsFromDictionary:@{
 @"id":             @"usertestID",
 }];

RKEntityMapping *usertest_TestMapping = [RKEntityMapping mappingForEntityForName:@"Test" inManagedObjectStore:managedObjectStore];
[usertest_TestMapping addAttributeMappingsFromDictionary:@{
 @"id":             @"testID",
 @"beginDate":            @"beginDate",
 @"expectedDuration":@"expectedDuration",
 @"finishDate":         @"finishDate",
 }];

RKRelationshipMapping* usertest_Test_Relationship = [RKRelationshipMapping relationshipMappingFromKeyPath:@"test" toKeyPath:@"test" withMapping:usertest_TestMapping];

//### GROUPS

RKEntityMapping *groupTestMapping = [RKEntityMapping mappingForEntityForName:@"QuestionGroup" inManagedObjectStore:managedObjectStore];
[groupTestMapping addAttributeMappingsFromDictionary:@{
 @"id":             @"groupID",
 @"number":            @"number",
 @"text":@"text",
 }];

RKRelationshipMapping* group_Test_Relationship = [RKRelationshipMapping relationshipMappingFromKeyPath:@"groups" toKeyPath:@"groups" withMapping:usertest_TestMapping];


//### ADD PROPERTY MAPPINGS 

RKResponseDescriptor *CompleteTestResponseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:testCompleteMapping pathPattern:@"/api/module/demo2/lesson/Phasellus/test/71" keyPath:nil statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)];


[testCompleteMapping addPropertyMappingsFromArray:[NSArray arrayWithObjects:usertest_Test_Relationship, nil]];
[usertest_TestMapping addPropertyMapping:group_Test_Relationship];

[objectManager addResponseDescriptor:CompleteTestResponseDescriptor];

我还尝试使用“test.groups”而不是“groups”,但没有成功。

最佳答案

尝试下面的代码。您的主要问题似乎是拼写错误(在 group_Test_Relationship 的定义中),您还缺少一些标识属性(不是严格必需的),但通常代码位于正确的路径上。

您没有显示 testCompleteMapping 的定义,因此您需要添加它并检查拼写错误。

//### TEST

RKEntityMapping *usertest_TestMapping = [RKEntityMapping mappingForEntityForName:@"Test" inManagedObjectStore:managedObjectStore];
[usertest_TestMapping addAttributeMappingsFromDictionary:@{
 @"id": @"testID",
 @"beginDate": @"beginDate",
 @"expectedDuration": @"expectedDuration",
 @"finishDate": @"finishDate",
 }];
 usertest_TestMapping.identificationAttributes = @[ @"testID" ];

//### GROUPS

RKEntityMapping *groupTestMapping = [RKEntityMapping mappingForEntityForName:@"QuestionGroup" inManagedObjectStore:managedObjectStore];
[groupTestMapping addAttributeMappingsFromDictionary:@{
 @"id": @"groupID",
 @"text": @"text",
 }];
 groupTestMapping.identificationAttributes = @[ @"groupID" ];

[usertest_TestMapping addPropertyMapping:[RKRelationshipMapping relationshipMappingFromKeyPath:@"groups" toKeyPath:@"groups" withMapping:groupTestMapping]];


// complete your 'testCompleteMapping' here, adding the 'test' relationship property mapping to 'usertest_TestMapping' if required


//### ADD PROPERTY MAPPINGS 

RKResponseDescriptor *completeTestResponseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:testCompleteMapping pathPattern:@"/api/module/demo2/lesson/Phasellus/test/71" keyPath:nil statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)];

[objectManager addResponseDescriptor:completeTestResponseDescriptor];

关于ios Restkit - 将对象与另一个列表中的列表映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16473484/

相关文章:

iOS 无法加载 View

javascript - 根据键将一个数组嵌套到另一个数组中

c# - 找不到类型或命名空间名称 'FormatterContext' .net 4.5

XAML 绑定(bind)到数据对象 Xamarin Forms 的父级

javascript - 如何在 IE11 中克隆 jQuery 对象及其子对象而不使用引用

javascript - 如何获取对象的第一个键?

ios - 如何在 App Store 的语言部分为我的应用程序显示法语?

ios - 我可以为我的特定设备保留测试广告吗?

iphone - 在iOS应用程序中,即使没有添加主自定义UIView,我仍然可以添加其他 View 对象作为 subview ?

ios - 性能缓慢 Json 图像分辨率