Pergunta

A minha pergunta é uma duplicata de

RestKit:como buscar um JSON simples matriz de seqüências de caracteres?

No entanto, enquanto o autor original encontrado as respostas útil, eu ainda estou perdida.Esta questão possui duas referências separadas, nem de que foi longe o suficiente para me ajudar (um completo novato no KVC e RestKit).

Uma referência é aqui e dá este exemplo de código

RKObjectMapping *mapping = [RKObjectMapping mappingForClass:[Whatever class]];
[mapping addPropertyMapping:[RKAttributeMapping attributeMappingFromKeyPath:nil toKeyPath:@"someAttribute"]];
RKResponseDescriptor *responseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:mapping pathPattern:@"/whatever" keyPath:nil statusCodes:nil];

O que é o que a classe deve ser?Deve ser NSString?Ou é esta insinuando que eu deveria criar uma classe de wrapper que tem uma propriedade que é um NSArray *?

E o que é @"someAttribute" deveria ser?Novamente, é que isto implique uma classe de wrapper caso em que someAttribute seria o nome da propriedade na minha classe de wrapper que é um NSArray *?

A outra referência é a aqui e enquanto ele mostra a obtenção de uma matriz em uma "classe de wrapper", a classe de wrapper tem apenas um NSNumber, não é uma matriz.Por isso não está claro como transformar esse exemplo para o que funciona para obter a matriz inteira.

Para referência, o servidor está retornando uma matriz de seqüências de caracteres exatamente como o original da pergunta:["string1", "string2", "string3"].

ATUALIZAÇÃO

Aqui está o código que eu tenha tentado.Eu criei uma classe de wrapper.

@interface CannedResponse : NSObject

@property (strong, nonatomic) NSString * response;

@end

Aqui é o mapeamento:

RKObjectMapping *mapping = [RKObjectMapping mappingForClass:[CannedResponse class]];
[mapping addPropertyMapping:[RKAttributeMapping attributeMappingFromKeyPath:nil toKeyPath:@"response"]];
[manager addResponseDescriptor:[RKResponseDescriptor responseDescriptorWithMapping:mapping method:RKRequestMethodGET pathPattern:RESPONSES_API_PATH keyPath:nil statusCodes:nil;

E eu estou chamando getObjectsAtPathForRouteName

O que eu estou ficando para trás é uma matriz de CannedReponses como esperado.No entanto, em vez de um NSString sendo colocado em resposta propriedade.Eu estou ficando um RKMappingSourceObject.Agora o RKMappingSourceObject de fato, contém a seqüência correta.

Eu vou estar olhando através de RestKit o log no console para ver se consigo colher mais algumas pistas.

ATUALIZAÇÃO#2

Como mencionado aqui por blakewatters eu não estou fazendo qualquer mapeamento neste exemplo, posso simplesmente ignorar o uso de RestKit.O problema é que todo o código que eu estou escrevendo na camada de serviço é usando RestKit e eu estava cegamente seguindo o padrão para todas as chamadas.Para esta chamada, o direito de resposta pode ser para descobrir como acessar AFNetworking diretamente.

Foi útil?

Solução

Aqui está uma resposta melhor usar outro comentário de blakewatters aqui

Não use RestKit para um pedido como este.Use AFNetworking para fazê-lo.E você pode acessar o AFHTTPClient como este

[RKObjectManager sharedManager].HTTPClient

O código, em seguida, apenas parece algo como isto

AFHTTPClient * client = [RKObjectManager sharedManager].HTTPClient;
[client getPath:YOUR_PATH
     parameters:nil
        success:^(AFHTTPRequestOperation *operation, id responseObject) {
            success([NSArray arrayWithArray:responseObject]);
        } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
            failure(operation.response.statusCode);
        }];

Outras dicas

Acontece que a maneira que eu estou fazendo isso na secção UPDATE não funciona.

O RKMappingSourceObject foi um arenque vermelho.Ele implementa NSProxy e, portanto, atua apenas como o NSString eu estava esperando.

Meu palpite para o que está acontecendo por trás das cenas:RestKit criar RKMappingSourceObject instâncias, como é anular a serialização.Quando ele percebe que esses objetos que eu tenho são primitivos e não mapeiam para qualquer coisa é só deixa-los no mapeamento objeto, mas desde que ele implementa NSProxy pode encaminhar todas as solicitações para o subjacente de seqüência de caracteres.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top