给出以下JSON:
{
"someKey":"someValue",
"otherKey":"otherValue",
"features":[
"feature1",
"feature2",
"feature3"
]
}
我正在使用NSManagedObject
和RKMapperOperation
将此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
有什么想法吗?
答案 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