Как сопоставить объект с помощью RestKit 0.20.x со сложной структурой JSON

Я использую Restkit 0.20.x для отображения объекта из json, например

{
    "d":{
        "results":[
            {
                "Web":[
                    "key1":"value1",
                    "key2":"value2"
                ],
                "Image":[
                    "key1":"value1",
                    "key2":"value2"
                ],
            },
        ],
    },
}

Моя основная цель - управлять ключами "Web" и "Image". Я пытаюсь сопоставить объект, но застрял на ключе «результаты» (значение ключа «результаты» - это массив, который имеет только один элемент в качестве словаря). Как использовать RestKit для отображения объекта в моем случае?

Моя неудачная реализация:

WFSD.h

@interface WFSD : NSObject  
@property (nonatomic, strong) WFSResults *results;
@end

WFSResults.h

@interface WFSResults : NSObject
@property (nonatomic, strong) WFSResult    *result;
@end

WFSResult.h

@interface WFSResult : NSObject
@property (nonatomic, strong) WFSWeb    *web;
@property (nonatomic, strong) WFSImage  *image;
@end

MyController.m

RKObjectMapping* dMapping = [RKObjectMapping mappingForClass:[WFSD class]];
RKObjectMapping* resultsMapping = [RKObjectMapping mappingForClass:[WFSResults class]];

RKRelationshipMapping* rsMapping1 = [RKRelationshipMapping relationshipMappingFromKeyPath:@"results" toKeyPath:@"results" withMapping:resultsMapping];
[dMapping addPropertyMapping:rsMapping1];

RKObjectMapping* resultMapping = [RKObjectMapping mappingForClass:[WFSResult class]];
[resultsMapping addPropertyMapping:[RKRelationshipMapping relationshipMappingFromKeyPath:nil toKeyPath:@"result" withMapping:resultMapping]];

RKRelationshipMapping* rsMapping2 = [RKRelationshipMapping relationshipMappingFromKeyPath:@"Image" toKeyPath:@"Image" withMapping:imageMapping];
[resultMapping addPropertyMapping:rsMapping2];

RKResponseDescriptor *responseDescriptor = [RKResponseDescriptor     responseDescriptorWithMapping:dMapping
                                                                                       pathPattern:nil
                                                                                           keyPath:@"d"
                                                                                       statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)];

person Võ Huy Hưng    schedule 01.07.2013    source источник
comment
Что вы пробовали и как вы пытаетесь хранить данные? Покажите свои сопоставления и структуру данных.   -  person Wain    schedule 01.07.2013
comment
я отредактировал свой неудачный инструмент. Есть ли у вас какие-либо предложения ?   -  person Võ Huy Hưng    schedule 01.07.2013


Ответы (1)


Посмотрите на удаление WFSResults из ваших классов моделей. На самом деле это просто список WFSResult объектов, поэтому вы должны смотреть на его моделирование как:

@interface WFSD : NSObject  
@property (nonatomic, strong) NSArray *results;
@end

Вам также нужно посмотреть на WFSResult, потому что Web и Image в JSON также являются массивами. Итак, я ожидаю увидеть:

@interface WFSResult : NSObject
@property (nonatomic, strong) NSArray  *web;
@property (nonatomic, strong) NSArray  *image;
@end

Таким образом, RestKit может создавать объекты во время сопоставления, а затем у него есть массив для хранения списка объектов.

person Wain    schedule 01.07.2013
comment
Хороший материал, и добро пожаловать в переполнение стека :-) Пожалуйста, примите ответы, которые были решены, и проголосуйте за ответы, которые помогли. - person Wain; 01.07.2013
comment
Подскажите, пожалуйста, как настроить отображение для вложенного массива объектов? Например. в приведенном выше примере web представляет собой NSArray из Web объектов. И Web снова объект с некоторыми атрибутами. Как я могу получить доступ к этим веб-атрибутам? Если я сделаю Web* web = [web objectAtIndex:0], а затем web.key1, я получу ноль. Как я могу этого добиться? - person MainstreamDeveloper00; 03.12.2013
comment
Как указать RestKit отображать атрибуты объекта, которые находятся внутри массива объектов? Конечно, я могу сделать сопоставление отношений, но как тогда добавить эти сопоставленные объекты к NSArray этих объектов? - person MainstreamDeveloper00; 03.12.2013
comment
@ Гарри, создай вопрос и подробно расскажи о том, что ты пробовал и пробовал. - person Wain; 04.12.2013