1

希望标题描述正确。

我得到以下 JSON: {"regions":[{"name":"Region 1", "zipcodes":["80432", "80433"]}, ...]}

我有两个实体RegionZipCode

@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:我在这个答案中看到的,但没有成功。我想我必须创建一个单独RKEntityMapping的 forZipCode但我不知道如何将它与我现有的代码粘合在一起,而不会重载RKResponseDescriptor.

你们中有人处理过类似的情况吗?你是怎么解决的?上面链接中的示例非常相似,但不幸的是,发布的解决方案非常不完整。

注 1:现有代码写入name我的数据库,但不会与我的数据库建立任何关系,ZipCode也不会将任何邮政编码写入我的数据库

注意 2:我使用的是最新的 RestKit 版本(0.20pre)

注3:你可以在这里救我的命;)

提前谢谢了!

4

1 回答 1

2

我做过类似的事情,发现addRelationshipMappingWithSourceKeyPath:mapping:效果最好。据我了解,对嵌套关系(相同请求)使用关系映射,对跨多个请求创建关系使用连接。

为此,您可能需要像这样重新格式化 JSON:

{"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 属性映射来做到这一点。

于 2013-03-15T14:01:55.183 回答