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.

Per riferimento Il server restituisce una serie di stringhe proprio come la domanda originale: ["string1", "string2", "string3"].

Aggiornamento

Qui è il codice che ho tentato. Ho creato una classe wrapper.

@interface CannedResponse : NSObject

@property (strong, nonatomic) NSString * response;

@end
.

Ecco la mappatura:

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

Quello che sto tornando è una serie di CannedReponses come previsto. Tuttavia piuttosto che un NSString viene inserito nella proprietà di risposta. Sto ricevendo un RKMappingSourceObject. Ora il RKMappingSourceObject contiene effettivamente la stringa corretta.

Guarderò attraverso il RestKit che accede alla console per vedere se riesco a brillare alcuni altri indizi.

Aggiornamento # 2

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.

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top