Parâmetros de consulta RestKit GET

Eu tenho usado o RestKit 0.10.0 por um tempo agora e até este ponto, eu só publiquei objetos serializados no meu servidor:

[[RKObjectManager sharedManager] postObject:serializedObject
                                 usingBlock:^(RKObjectLoader *loader) {
                                     loader.delegate = self;
                                     loader.objectMapping = responseMapping;
                                     loader.serializationMIMEType = RKMIMETypeFormURLEncoded;
                                     loader.targetObject = nil;
                                 }];

Por enquanto, tudo bem. Mas agora preciso fazer uma solicitação GET para o servidor com alguns parâmetros de consulta. A primeira coisa natural que veio em mente foi fazer o mesmo que fiz para postar objetos:

criar um mapeamento de serialização para o objeto que encapsula os parâmetros de consultacriar um mapeamento de resposta para o objeto que está sendo recebido do servidordefinir e usar um roteador para RKRequestMethodGET (em vez de RKRequestMethodPOST)faça o pedido usando getObject: usingBlock (em vez de postObject: usingBlock)

Logo descobri que esta não é a maneira de fazê-lo, então depois de pesquisar os recursos disponíveis (Wiki do RestKit, Grupo RestKit do Google) Conheço agora duas soluções consideradas válidas:

Anexando os parâmetros de consulta ao caminho do recurso.

Isso funciona perfeitamente.

NSDictionary *queryParams = [NSDictionary dictionaryWithObjectsAndKeys:
                                          token, @"accessToken",
                                          [NSNumber numberWithInt:level], @"level",
                                          [NSNumber numberWithInt:count], @"count",
                                          nil];

NSString* resourcePath = [PEER_SUGGESTIONS_CONTROLLER_PATH stringByAppendingQueryParameters:queryParams];

[[RKObjectManager sharedManager] loadObjectsAtResourcePath:resourcePath
                                                usingBlock:^(RKObjectLoader *loader) {
                                                    loader.delegate = self;
                                                    loader.objectMapping = responseMapping;
                                                }];
Definindo os parâmetros de consulta no bloco do carregador.

Isso não envia os parâmetros da consulta.

RKParams *params = [RKParams params];
[params setValue:token forParam:@"accessToken"];
[params setValue:[NSNumber numberWithInt:level] forParam:@"level"];
[params setValue:[NSNumber numberWithInt:count] forParam:@"count"];

[[RKObjectManager sharedManager] loadObjectsAtResourcePath:PEER_SUGGESTIONS_CONTROLLER_PATH
                                                usingBlock:^(RKObjectLoader *loader) {
                                                    loader.delegate = self;
                                                    loader.objectMapping = responseMapping;
                                                    loader.params = params;
                                                }];

Minhas perguntas são:

Por que a segunda solução não funciona?Por que a primeira solução está funcionando sem ter que definir o loader.targetObject como nil, embora eu não tenha nenhum caminho de chave raiz na resposta JSON?Quais são os casos em que devo usar o método getObject: usingBlock? Qual é o propósito pretendido?Para que devo usar o loader.params? O tutorial de mapeamento de objetos dowiki diz que essa propriedade pode ser usada para encapsular parâmetros POST, mas eu não vejo o ponto desde que eu possa envolver os parâmetros no objeto serializado que está sendo enviado com o método postObject: usingBlock.

Obrigado.

[MAIS TARDE]

Em relação à resposta à minha segunda pergunta: Eu estou definindo o targetObject como nil no loader block ao fazer solicitações POST porque caso contrário o RestKit tentará usar o mapeamento de objeto de envio para a resposta (confira istoligação para uma discussão relacionada). Mas como estou usando loadObjectsAtResourcePath: usingBlock :, não há nenhum objeto sendo enviado, portanto, a resposta mapeará naturalmente no mapeamento de resposta sem ter que definir targetObject como nil.

questionAnswers(2)

yourAnswerToTheQuestion