希望标题描述正确。
我得到了以下JSON:{"regions":[{"name":"Region 1", "zipcodes":["80432", "80433"]}, ...]}
我有两个实体Region
和ZipCode
:
@interface Region : NSManagedObject
@property (nonatomic, retain) NSString * name;
@property (nonatomic, retain) NSSet *zipCodes;
@end
@interface ZipCode : NSManagedObject
@property (nonatomic, retain) NSString * zipCode;
@property (nonatomic, retain) Region *region;
@end
我试着用下面的代码来填充:
RKEntityMapping *regionMapping = [RKEntityMapping mappingForEntityForName:@"Region" inManagedObjectStore:managedObjectStore];
//[regionMapping addConnectionForRelationship:@"zipCodes" connectedBy:@{@"zipCode" : @"zipcodes"}];
[regionMapping addAttributeMappingsFromDictionary:@{@"name":@"name"}];
RKResponseDescriptor *regionDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:regionMapping pathPattern:@"/regions" keyPath:@"regions" statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)];
[objectManager addResponseDescriptor:regionDescriptor];
正如你所看到的,我也试图使用addConnectionForRelationship: connectedBy:
,我在这个答案中看到,但没有成功。我想我必须为ZipCode
创建一个单独的RKEntityMapping
,但我不知道如何将其与我现有的代码粘合在一起,而不会重载RKResponseDescriptor
。
你们中有人遇到过类似的情况吗?你是怎么解决的?上面链接的例子非常相似,但不幸的是,所发布的解决方案非常不完整。
注1:现有的代码写入name
到我的数据库,但不创建与ZipCode
的任何关系,也没有写入任何邮政编码到我的数据库
注2:我正在使用最新的RestKit版本(0.20pre)
注释3:你可以在这里救我的命;)
提前感谢!
我做过类似的事情,发现addRelationshipMappingWithSourceKeyPath:mapping:
效果最好。根据我的理解,对于嵌套关系(相同的请求)使用关系映射,对于跨多个请求创建关系使用连接。
{"regions":[
{"name":"Region 1", "zipcodes":[
{"zipcode": "80432"},
{"zipcode": "80433"}]},
...]}
…并将映射更改为以下内容:
RKEntityMapping *regionMapping = [RKEntityMapping mappingForEntityForName:@"Region" inManagedObjectStore:managedObjectStore];
[regionMapping addAttributeMappingsFromArray:@[@"name"]];
RKEntityMapping *zipCodeMapping = [RKEntityMapping mappingForEntityForName:@"ZipCode" inManagedObjectStore:managedObjectStore];
[zipCodeMapping addAttributeMappingsFromArray:@[@"name"]];
[regionMapping addRelationshipMappingWithSourceKeyPath:@"zipcodes" mapping:zipCodeMapping];
RKResponseDescriptor *regionDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:regionMapping pathPattern:@"/regions" keyPath:@"regions" statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)];
[objectManager addResponseDescriptor:regionDescriptor];
我还没有尝试映射与JSON格式的关系,你正在使用(字符串数组,而不是一个数组的字典元素),但你可以通过玩周围的zipCode属性映射做到这一点。