Pregunta

Mi pregunta es un duplicado de

RestKit:cómo capturar un simple JSON array de cadenas?

Sin embargo, mientras que el autor original encontrado las respuestas útiles, todavía estoy perdido.Esta pregunta presenta dos referencias, ninguno de los cuales fue lo suficientemente lejos para que me ayude (un principiante en KVC y RestKit).

Una referencia es aquí y le da a este código de ejemplo

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

¿Qué es Lo que la clase supone?Debe ser NSString?O es esto lo que implica que debo crear una clase contenedora que tiene una propiedad que es un NSArray *?

Y lo que es @"someAttribute" se supone que sea?De nuevo, es esto lo que implica una clase de contenedor en cuyo caso someAttribute sería el nombre de la propiedad en mi clase contenedora que es un NSArray *?

La otra referencia es aquí y mientras se muestra la captura de una matriz en un "contenedor de clase", de la clase contenedora sólo tiene una NSNumber, no una matriz.Así que no está claro cómo convertir ese ejemplo a uno que trabaja para llegar a toda la matriz.

Para referencia, el servidor devuelve una matriz de cadenas como la pregunta original:["texto1", "texto2", "string3"].

ACTUALIZACIÓN

Aquí está el código que he intentado.He creado una clase contenedora.

@interface CannedResponse : NSObject

@property (strong, nonatomic) NSString * response;

@end

Aquí está la asignación:

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;

Y yo estoy llamando getObjectsAtPathForRouteName

Lo que estoy recibiendo es una matriz de CannedReponses como era de esperar.Sin embargo, en lugar de una NSString puesta en la respuesta de la propiedad.Me estoy poniendo un RKMappingSourceObject.Ahora el RKMappingSourceObject en efecto, contienen la cadena correcta.

Voy a estar mirando a través de la RestKit inicio de sesión en la consola para ver si puedo recoger algunos más pistas.

ACTUALIZACIÓN#2

Como se mencionó aquí por blakewatters no estoy haciendo ninguna asignación en este ejemplo y sólo puede omitir el uso de RestKit.El problema es que todo el código que estoy escribiendo en la capa de servicio es el uso de RestKit y yo estaba ciegamente siguiendo el patrón para todas las llamadas.Para esta convocatoria la respuesta correcta podría ser la de averiguar cómo acceder a AFNetworking directamente.

¿Fue útil?

Solución

Aquí es una mejor respuesta con otro comentario de blakewatters aquí

No utilice RestKit para una petición como esta.Uso AFNetworking para hacerlo.Y usted puede tener acceso a la AFHTTPClient como este

[RKObjectManager sharedManager].HTTPClient

A continuación, el código sólo se ve algo como esto

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);
        }];

Otros consejos

Resulta que la manera en que yo estoy haciendo en la ACTUALIZACIÓN de la sección de trabajo.

El RKMappingSourceObject fue un arenque rojo.Se implementa NSProxy y por lo tanto actúa como el NSString que me esperaba.

Mi conjetura en cuanto a lo que está pasando detrás de las escenas:RestKit crear RKMappingSourceObject instancias como es la deserialización.Cuando se da cuenta de que estos objetos los que tengo son primitivas y no mapa para nada, sólo les deja en el objeto de asignación, pero ya que implementa NSProxy puede reenviar las solicitudes a la base de la cadena.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top