RestKit:映射JSON字符串数组

时间:2013-06-19 09:28:48

标签: ios core-data restkit restkit-0.20

给出以下JSON:

{
   "someKey":"someValue",
   "otherKey":"otherValue",
   "features":[
      "feature1",
      "feature2",
      "feature3"
   ]
}

我正在使用NSManagedObjectRKMapperOperation将此JSON映射到RKEntityMapping(在此示例中,我将有2个实体映射:一个用于顶级对象,另一个用于我的功能类)。

顶级对象映射是微不足道的:两个属性映射加上与特征关系的关系一(特征)。

我的问题是,如何将功能JSON数组映射到Feature对象数组中? Feature类只有一个属性name,我想在其中存储“feature1”,“feature2”等,以及对父对象(顶级对象)的引用。像这样:

@interface Feature : NSManagedObject

//In the implementation file both properties are declared with @dynamic.
@property (nonatomic, retain) NSString * name;
@property (nonatomic, retain) MyTopLevelObject *myTopLevelObject;

@end

有什么想法吗?

3 个答案:

答案 0 :(得分:7)

您需要使用nil密钥路径:

RKEntityMapping *featureMapping = [RKEntityMapping mappingForEntityForName:...];
[featureMapping addPropertyMapping:[RKAttributeMapping attributeMappingFromKeyPath:nil toKeyPath:@"name"]];
featureMapping.identificationAttributes = @[ @"name" ];

然后,在顶级对象映射上,定义关系:

[topMapping addPropertyMapping:[RKRelationshipMapping relationshipMappingFromKeyPath:@"features" toKeyPath:@"features" withMapping:featureMapping]];

在您的功能中(在模型中),myTopLevelObject应定义为与顶级对象的双向关系。

答案 1 :(得分:7)

如果您使用的是Restkit 0.20+,那么您需要做的就是将表示实体的字符串数组的属性设置为Transformable。

例如,在这种情况下,您的Feature实体有3个属性:

someKey - String
otherKey - String
features - Transformable

Restkit会自动将'features'映射为字符串数组。

因此,一旦映射,访问features数组中的一个字符串将非常简单:

[Feature.features objectAtIndex:?]

我只是尝试过它并且完美无缺。

答案 2 :(得分:1)

我认为你不能像这样将一个字符串数组映射到ManagedObject中。但是,由于功能只有一个name属性,您可以将其作为数组存储到MyTopLevelObject中。您可以通过在类型为features的数据模型中向MyTopLevelObject添加Transformable属性来实现此目的。 RestKit将使用NSStrings自动解析NSArray的功能。然后,您可以获得以下功能:

MyTopLevelObject *topLevelObject = ... // get the object from the persistent store
NSArray *features = (NSArray*)topLevelObject.features; // this will contain the features as NSString objects