我想等记载here但我使用RKEntityMapping,而不是RKObjectMapping我RestKit架构以添加动态映射。 RKEntityMapping继承自RKObjectMapping根据documentation。要使用DynamicMapping与EntityMapping上RestKit
我的问题是我无法找到一种方法从EntityMapping中提取ObjectMapping。我甚至不知道它是否可行。
这就是我想要解析JSON:
"moment": {
"id": 23,
"is_closed": false,
"created_at": "2013-04-19 19:28:42.533901",
"updated_at": "2013-04-19 19:28:42.533901",
"spot_id": "1",
"spot_type": "Place",
"place": {
"id": 21,
"name": "First place"
}
}
这是我的代码,我尝试我EntityMapping地图,包含DynamicMapping
RKEntityMapping *momentMapping = [RKEntityMapping mappingForEntityForName:@"Moment" inManagedObjectStore:store];
momentMapping.identificationAttributes = @[ @"momentId"];
[momentMapping addAttributeMappingsFromDictionary:@{
@"moment.id" : @"momentId",
@"moment.name" : @"name",
@"moment.creator.id" : @"creatorId",
@"moment.spot_id" : @"spotId",
@"moment.spot_type" : @"spotType",
@"moment.is_closed" : @"isClosed",
@"moment.created_at" : @"createdAt",
@"moment.updated_at" : @"updatedAt"
}];
//Add mapping of the place
RKEntityMapping *placeMapping = [APICallPlace RKGetPlaceMappingForManagedObjectStore:store];
[placeMapping addConnectionForRelationship:@"moments" connectedBy:@{ @"placeId": @"spotId" }];
//[momentMapping addConnectionForRelationship:@"place" connectedBy:@{@"placeId": @"placeId"}];
[momentMapping addPropertyMapping:[RKRelationshipMapping relationshipMappingFromKeyPath:@"moment.place"
toKeyPath:@"place"
withMapping:placeMapping]];
//Add mapping of the establishment
RKEntityMapping *establishmentMapping = [APICallEstablishment RKGetEstablishmentMappingForManagedObjectStore:store];
[establishmentMapping addConnectionForRelationship:@"moments" connectedBy:@{ @"establishmentId": @"spotId" }];
//[momentMapping addConnectionForRelationship:@"place" connectedBy:@{@"placeId": @"placeId"}];
[momentMapping addPropertyMapping:[RKRelationshipMapping relationshipMappingFromKeyPath:@"moment.establishment"
toKeyPath:@"establishment"
withMapping:establishmentMapping]];
我想附一个动态映射。我在下面尝试了这种方式。我加了???显示我的问题在哪里。方法setObjectMapping需要一个RKObjectMapping,但我只有一个EntityMapping。
RKDynamicMapping* dynamicMapping = [RKDynamicMapping new];
[placeMapping addPropertyMapping:[RKRelationshipMapping relationshipMappingFromKeyPath:@"spot" toKeyPath:@"spot" withMapping:dynamicMapping]];
// Connect a response descriptor for our dynamic mapping
RKResponseDescriptor *responseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:dynamicMapping method:RKRequestMethodAny pathPattern:nil keyPath:@"moment" statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)];
[[RKObjectManager sharedManager] addResponseDescriptor:responseDescriptor];
[dynamicMapping setObjectMapping:(RKObjectMapping *)placeMapping.requestMapping whenValueOfKeyPath:@"spot_type" isEqualTo:@"Place"];
[dynamicMapping setObjectMapping:(RKObjectMapping *)establishmentMapping.requestMapping whenValueOfKeyPath:@"spot_type" isEqualTo:@"Establishment"];
如果有人有解决这个问题的想法,我会非常感谢听到它!
预先感谢您。
感谢您这么快回答!你是对的。我只有一个地方或一个机构,但不是在同一时间。你所说的只关联momentMapping和我的dynamicMapping正是我想要的。我不知道如何配置dynamicMapping以选择哪个映射是好的,因为我尝试了行代码来编写,但它不工作,因为placeMapping不是RKObjectMapping而是RKEntityMapping。 – BriceB
所以你不需要动态映射。 RestKit只会映射您收到的内容并忽略其他关系映射... – Wain
实体映射是一种对象映射。它以什么方式不起作用? – Wain