使用RestKit动态映射从一组元素映射到一个Core Data属性

时间:2013-07-25 11:39:45

标签: restkit restkit-0.20

我正在尝试从以下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

1 个答案:

答案 0 :(得分:0)

我将它存储为一个集合,然后将其过滤掉。或者,向托管对象子类添加一个方法,该方法被调用以设置集合,然后在那里进行过滤(将过滤结果设置为实际属性)。试图让RestKit做这种过滤很难(我不确定你能做到)。