我正在尝试从以下JSON映射到一个CoreData属性:
{
"products": [
{
"stock": {
"inStock": true,
"inStockBeforeMaxAdvanceOrderingDate": false
},
"url": "xxxxxxxxxxx",
"manufacturer": "Demo",
"images": [
{
"format": "thumbnail",
"imageType": "PRIMARY",
"url": "/imageURL/xx.jpg"
},
{
"format": "thumbnailGrid",
"imageType": "PRIMARY",
"url": "/imageURL/xxx.jpg"
}
],
"productFees": [
[
"EMPTY",
"0.0"
]
],
"name": "demo product"
}
]
}
我正在尝试从images集合中仅提取thumbnailGrid图像网址。在我的回复中,我有很多次回归,但我只对一个领域感兴趣。 我可以在CoreData中设置关系,我没有任何问题,但是因为我知道我只匹配一个资源,我希望存储在一个属性而不是一个关系。
我的产品CoreData实体具有thumbnailImageURL属性。
我的产品实体映射:
RKEntityMapping *mapping = [RKEntityMapping mappingForEntityForName:@"Product" inManagedObjectStore:_managedObjectStore];
[mapping addAttributeMappingsFromDictionary:@{
@"stock.inStock":@"inStock",
@"stock.inStockBeforeMaxAdvanceOrderingDate":@"inStockBeforeMaxAdvanceOrderingDate",
@"url":@"url",
@"manufacturer": @"manufacturer",
@"manufacturerName":@"manufacturerName",
@"name":@"name",
}];
RKDynamicMapping *dynamicMapping = [RKDynamicMapping new];
[mapping addPropertyMapping:[RKRelationshipMapping relationshipMappingFromKeyPath:@"images" toKeyPath:@"thumbnailImageURL" withMapping:dynamicMapping]];
[dynamicMapping setObjectMappingForRepresentationBlock:^RKObjectMapping *(id representation) {
if ([[representation objectForKey:@"format"] isEqualToString:@"thumbnailGrid"]) {
return ???;
}
return nil;
}];
我不确定匹配发生时从动态映射器返回什么。我应该创建另一个RKEntityMapping实例,它是同一个“Product”实体的地图,并将url映射到thumbnailImageURL吗?
也可以通过某种方式添加动态映射器作为属性而不是关系吗?
谢谢,
Csaba
答案 0 :(得分:0)
我将它存储为一个集合,然后将其过滤掉。或者,向托管对象子类添加一个方法,该方法被调用以设置集合,然后在那里进行过滤(将过滤结果设置为实际属性)。试图让RestKit做这种过滤很难(我不确定你能做到)。