Frage

Meine Frage ist ein Duplikat von

RestKit:Wie rufe ich ein einfaches JSON-Array von Zeichenfolgen ab?

Obwohl der ursprüngliche Autor die Antworten hilfreich fand, bin ich immer noch verwirrt.Diese Frage enthält zwei separate Referenzen, von denen keine weit genug ging, um mir (einem völligen Anfänger) zu helfen KVC Und RestKit).

Eine Referenz ist Hier und gibt diesen Beispielcode

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

Was soll eine Klasse sein?Sollte es NSString sein?Oder bedeutet das, dass ich eine Wrapper-Klasse erstellen sollte, die eine Eigenschaft hat, nämlich ein NSArray *?

Und was soll @"someAttribute" sein?Bedeutet dies wiederum eine Wrapper-Klasse? In diesem Fall wäre someAttribute der Name der Eigenschaft in meiner Wrapper-Klasse, bei der es sich um ein NSArray * handelt?

Der andere Hinweis bezieht sich auf Hier und während das Abrufen aus einem Array in eine „Wrapper-Klasse“ gezeigt wird, hat die Wrapper-Klasse nur eine NSNumber, kein Array.Es ist also nicht klar, wie man dieses Beispiel in ein Beispiel umwandeln kann, mit dem man das gesamte Array erhalten kann.

Als Referenz gibt der Server ein Array von Zeichenfolgen zurück, genau wie bei der ursprünglichen Frage:["string1", "string2", "string3"].

AKTUALISIEREN

Hier ist Code, den ich versucht habe.Ich habe eine Wrapper-Klasse erstellt.

@interface CannedResponse : NSObject

@property (strong, nonatomic) NSString * response;

@end

Hier ist die Zuordnung:

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;

Und ich rufe an getObjectsAtPathForRouteName

Was ich zurückbekomme, ist eine Reihe von CannedReponses wie erwartet.Allerdings eher als ein NSString wird in die Antworteigenschaft eingefügt.Ich bekomme eine RKMappingSourceObject.Jetzt die RKMappingSourceObject enthält tatsächlich die richtige Zeichenfolge.

Ich werde das durchsehen RestKit Ich melde mich in der Konsole an, um zu sehen, ob ich weitere Hinweise finden kann.

UPDATE#2

Wie erwähnt Hier von blakewatters Ich mache in diesem Beispiel kein Mapping und kann die Verwendung von einfach umgehen RestKit.Das Problem ist, dass der gesamte Code, den ich in der Serviceschicht schreibe, verwendet wird RestKit und ich folgte bei allen Anrufen blind dem Muster.Für diesen Anruf könnte die richtige Antwort darin bestehen, herauszufinden, wie man darauf zugreifen kann AFNetworking direkt.

War es hilfreich?

Lösung

Hier ist eine bessere Antwort mit einem anderen Kommentar von Blakewatters Hier

Verwenden Sie RestKit nicht für eine Anfrage wie diese.Verwenden Sie dazu AFNetworking.Und Sie können auf diese Weise auf den AFHTTPClient zugreifen

[RKObjectManager sharedManager].HTTPClient

Der Code sieht dann einfach so aus

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

Andere Tipps

Es stellt sich heraus, dass die Art und Weise, wie ich es im Abschnitt UPDATE mache, funktioniert.

Das RKMappingSourceObject war ein Ablenkungsmanöver.Es implementiert NSProxy und verhält sich daher genau wie der NSString, den ich erwartet hatte.

Meine Vermutung, was sich hinter den Kulissen abspielt:RestKit erstellt beim Deserialisieren RKMappingSourceObject-Instanzen.Wenn es erkennt, dass diese Objekte, die ich habe, Grundelemente sind und nichts zugeordnet werden können, belässt es sie einfach im Zuordnungsobjekt, aber da es NSProxy implementiert, kann es alle Anforderungen an die zugrunde liegende Zeichenfolge weiterleiten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top