我正在尝试使用 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/