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中我是否需要两者之间的任何关系?