Core data 空父级的Reskit
我的回答是Core data 空父级的Reskit,core-data,restkit-0.20,Core Data,Restkit 0.20,我的回答是 <people> <person> ... </person> <person> ... </person> </people> 响应描述符设置为: RKResponseDescriptor *personResponseDescriptors = [RKResponseDescriptor responseDescriptorWithMapping:[MappingProvid
<people>
<person>
...
</person>
<person>
...
</person>
</people>
响应描述符设置为:
RKResponseDescriptor *personResponseDescriptors = [RKResponseDescriptor responseDescriptorWithMapping:[MappingProvider contactMapping] method:RKRequestMethodGET pathPattern:nil keyPath:@"people.person" statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)];
[self addResponseDescriptor:personResponseDescriptors];
如何检查子级是否存在或父级是否为空,并相应地进行映射
@编辑-我尝试通过以下方式进行动态映射:
+ (RKDynamicMapping *) dynPeopleMapping {
// Basic setup
RKDynamicMapping* dynamicMapping = [RKDynamicMapping new];
RKEntityMapping *conMapping = [MappingProvider contactMapping];
[conMapping addPropertyMapping:[RKRelationshipMapping relationshipMappingFromKeyPath:@"person" toKeyPath:@"Contact" withMapping:dynamicMapping]];
// Configure the dynamic mapping via a block
[dynamicMapping setObjectMappingForRepresentationBlock:^RKEntityMapping *(id representation) {
if([representation valueForKeyPath:@"people.person"]){
// what can i do here to map person with contact when it exists?
return conMapping;
}else
return nil;
}];
return dynamicMapping;
}
但它并没有将人员映射到联系人,因为人员是包含数据的数组的集合,联系人是单个人员的核心数据对象。如何绘制它们的地图?已解决
谢谢@Wain。
我只是创建了people nsobject类和person nsmanaged对象。动态映射如下所示:
+ (RKEntityMapping *)contactMapping {
//RKObjectMapping *mapping = [RKObjectMapping mappingForClass:[Contact class]];
RKEntityMapping *mapping = [RKEntityMapping mappingForEntityForName:@"Contact"
inManagedObjectStore:[[HRCoreData sharedInstance] objectStore]];
NSDictionary *mappingDictionary = @{@"id.text": @"contactId",
@"title.text": @"title",
@"first-name.text": @"firstName",
@"last-name.text": @"lastName",
@"company-name.text": @"companyName"
};
[mapping addAttributeMappingsFromDictionary:mappingDictionary];
mapping.identificationAttributes = @[@"contactId"];
return mapping;
}
+ (RKDynamicMapping *) dynPeopleMapping {
// Basic setup
RKDynamicMapping* dynamicMapping = [RKDynamicMapping new];
RKObjectMapping *peopleMapping = [RKObjectMapping mappingForClass:[HRPeople class]];
RKEntityMapping *personMapping = [MappingProvider contactMapping];
[dynamicMapping setObjectMappingForRepresentationBlock:^RKObjectMapping *(id representation) {
NSLog(@"people.person:%@", [[representation valueForKeyPath:@"people.person"] description]);
if([representation valueForKeyPath:@"person"]){
return personMapping;
}else
return peopleMapping;
}];
return dynamicMapping;
}
响应描述符为:
RKResponseDescriptor *personResponseDescriptors = [RKResponseDescriptor responseDescriptorWithMapping:[MappingProvider dynPeopleMapping] method:RKRequestMethodGET pathPattern:nil keyPath:@"people" statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)];
[self addResponseDescriptor:personResponseDescriptors];
您可以使用动态映射,或者在没有内容时让服务器返回不同的状态代码。@Wain谢谢您的回复。我编辑了我的帖子没有成功!同样的错误?我认为您只需要使用@people作为响应描述符中的关键路径,然后使用动态映射。您可能还需要一个容器对象。您可以将接口更改为JSON吗?我认为这也是一个特定于XML的问题,因为嵌套键。不,我不能将其更改为json。服务器响应是xml格式的,目前我无法将xml解析为json。如果我在响应描述符中使用people,那么我已经尝试过的映射会是怎样的,它给出的错误是person不可映射到contact?contact是coredata的RKEntity对象,我不想存储people,因为响应中没有数据,它只是外部标记。在datamodel中我是否需要两者之间的任何关系?