Come faccio a prendere una semplice matrice JSON di stringhe usando Restkit
-
20-12-2019 - |
Domanda
La mia domanda è un duplicato di
Restkit: Come recuperare un semplice array JSON di stringhe?
Tuttavia, mentre l'autore originale ha trovato utile le risposte, sono ancora perso. Questa domanda presenta due riferimenti separati, nessuno dei due è andato abbastanza lontano per aiutarmi (un principiante completo in KVC
e RestKit
).
Un riferimento è qui e dà questo codice di esempio
RKObjectMapping *mapping = [RKObjectMapping mappingForClass:[Whatever class]];
[mapping addPropertyMapping:[RKAttributeMapping attributeMappingFromKeyPath:nil toKeyPath:@"someAttribute"]];
RKResponseDescriptor *responseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:mapping pathPattern:@"/whatever" keyPath:nil statusCodes:nil];
.
Che cosa dovrebbe essere qualsiasi classe? Dovrebbe essere NSString? O questo implica dovrebbe creare una classe wrapper che ha una proprietà che è un NSarray *?
E ciò che è @ "someattribute" dovrebbe essere? Ancora una volta, questo implica una classe wrapper in cui caso someattributo sarebbe il nome della proprietà sulla mia classe wrapper che è un NSarray *?
L'altro riferimento è quello di qui < / a> E mentre mostra il recupero da un array in una "classe wrapper", la classe wrapper ha solo un numero NSNumber, non un array. Quindi non è chiaro come trasformare quell'esempio in uno che funziona per ottenere l'intero array.
Qui è il codice che ho tentato. Ho creato una classe wrapper.
@interface CannedResponse : NSObject
@property (strong, nonatomic) NSString * response;
@end
.
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 sto chiamando getObjectsAtPathForRouteName
Come menzionato qui by Blakewatters non sto facendo nessuno Mappatura in questo esempio e può semplicemente ignorare l'uso di RestKit
. Il problema è che tutto il codice che sto scrivendo nel livello di servizio sta usando RestKit
e stavo seguendo ciecamente il modello per tutte le chiamate. Per questa chiamata la risposta giusta potrebbe essere quella di capire come accedere a AFNetworking
direttamente.
Soluzione
Ecco una risposta migliore usando un altro commento da Blakewatters qui
Non utilizzare Restkit per una richiesta come questa.Usa Afnetworking per farlo.E puoi accedere a AfhttpClient come questo
[RKObjectManager sharedManager].HTTPClient
.
Il codice quindi sembra qualcosa di simile a questo
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);
}];
. Altri suggerimenti
Si scopre che il modo in cui lo sto facendo nella sezione Aggiorna funziona.
La rkmappingsourceobject è stata un'erratura rossa.Implementa Nsproxy e quindi agisce proprio come il NSString che mi aspettavo.
La mia ipotesi su cosa sta succedendo dietro le quinte: Restkit crea istanze rkmappingsourceobject mentre sta deseriabilmente.Quando si rende conto che questi oggetti che ho sono primitivi e non mapparono a nulla a nulla lasciali solo nell'oggetto di mappatura, ma poiché implementa Nsproxy può inoltrare qualsiasi richiesta alla stringa sottostante.