Question

Ma question est un double de

Kit de repos :comment récupérer un simple tableau JSON de chaînes ?

Cependant, même si l'auteur original a trouvé les réponses utiles, je suis toujours perdu.Cette question comporte deux références distinctes, dont aucune n'est allée assez loin pour m'aider (un débutant complet en KVC et RestKit).

Une référence est ici et donne cet exemple de code

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

Quelle est la classe "Whatever" censée être ?Devrait-il s'agir de NSString ?Ou est-ce que cela implique que je devrais créer une classe wrapper qui possède une propriété qui est un NSArray * ?

Et qu'est-ce que @"someAttribute" est censé être ?Encore une fois, cela implique-t-il une classe wrapper, auquel cas someAttribute serait le nom de la propriété de ma classe wrapper qui est un NSArray * ?

L'autre référence est à ici et bien qu'il montre la récupération d'un tableau dans une "classe wrapper", la classe wrapper n'a qu'un seul NSNumber, pas un tableau.Il n’est donc pas clair comment transformer cet exemple en un exemple qui fonctionne pour obtenir l’ensemble du tableau.

Pour référence, le serveur renvoie un tableau de chaînes, tout comme la question d'origine :["chaîne1", "chaîne2", "chaîne3"].

MISE À JOUR

Voici le code que j'ai essayé.J'ai créé une classe wrapper.

@interface CannedResponse : NSObject

@property (strong, nonatomic) NSString * response;

@end

Voici la cartographie :

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;

Et j'appelle getObjectsAtPathForRouteName

Ce que je récupère, c'est un tableau de CannedReponses comme prévu.Cependant, plutôt qu'un NSString étant placé dans la propriété de réponse.je reçois un RKMappingSourceObject.Maintenant le RKMappingSourceObject contient effectivement la bonne chaîne.

je vais regarder à travers le RestKit Je me connecte à la console pour voir si je peux glaner d'autres indices.

MISE À JOUR #2

Comme mentionné ici par blakewatters, je ne fais aucun mappage dans cet exemple et je peux simplement contourner l'utilisation de RestKit.Le problème est que tout le code que j'écris dans la couche service utilise RestKit et je suivais aveuglément le modèle pour tous les appels.Pour cet appel, la bonne réponse pourrait être de trouver comment accéder AFNetworking directement.

Était-ce utile?

La solution

Voici une meilleure réponse en utilisant un autre commentaire de Blakewatters ici

N'utilisez pas RestKit pour une demande comme celle-ci.Utilisez AFNetworking pour le faire.Et vous pouvez accéder au AFHTTPClient comme ceci

[RKObjectManager sharedManager].HTTPClient

Le code ressemble alors à ceci

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

Autres conseils

Il s'avère que la façon dont je le fais dans la section UPDATE fonctionne.

Le RKMappingSourceObject était une fausse piste.Il implémente NSProxy et agit donc exactement comme le NSString auquel je m'attendais.

Mon hypothèse sur ce qui se passe dans les coulisses :RestKit crée des instances RKMappingSourceObject lors de la désérialisation.Lorsqu'il se rend compte que ces objets que j'ai sont des primitives et ne correspondent à rien, il les laisse simplement dans l'objet de mappage, mais comme il implémente NSProxy, il peut transmettre toutes les requêtes à la chaîne sous-jacente.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top