Frage

Ich habe Probleme, eine JSON-Antwort auf Objekte unter Verwendung von Restkit und Objective-C zuzuordnen.

Ich habe bereits meinen RKObjectManager und meine Zuordnungen in meinem AppDelegate eingerichtet, wie vorgeschlagen Mein vorheriger Beitrag durch MJA.

Ich rufe mein Backend in meinem an Regler gemäß dem Beispiel unten.

Es gibt zwei Probleme, mit denen ich Probleme habe:

  1. [RKObjectManager SharedManager] PostObject: MapResponsewith: Reaktionsemapping -Delegierter: self]; } <- Dies führt zu einem "Selbst" ist mit der Typ-ID unvereinbar. Was muss ich darauf senden?
  2. Wie werde ich das Ergebnis in DidloadObject an das von mir definierte Übersetzungsobjekt (translationText) werfen.

Jede Hilfe wäre sehr geschätzt.

@synthesize inputtext = _text; 
@synthesize translation = _translation; 
@synthesize translatedText = _translatedText;

- (Translation *)translatedText {
if (!_translatedText) _translatedText = [[Translation alloc] init];
return _translatedText; }

- (IBAction)translatePressed {
//create TranslationRequest
TranslationRequest *request = [[TranslationRequest alloc] init];
[request setSourceId:@"1"];
[request setRegionTag:@"Hello"];
[request setInputString:self.inputtext.text];

//fetch the desired mapping to map response with
RKObjectMapping * responseMapping = [[RKObjectManager sharedManager].mappingProvider objectMappingForClass:[Translation class]];

[[RKObjectManager sharedManager] postObject:request mapResponseWith:responseMapping delegate:self]; }

- (void)objectLoader:(RKObjectLoader*)objectLoader didLoadObject:(id)object  { 
    self.translation.text = [object translatedText].translation; 
} 
- (void)objectLoader:(RKObjectLoader*)objectLoader didFailWithError:(NSError*)error { 
    NSLog(@"Hit error: %@", error);  
}
War es hilfreich?

Lösung

Um das erste Problem zu beheben, deklarieren Sie Ihren Kontroller in der .H -Datei wie folgt:

#import "RestKit/RestKit.h"
...
@interface MyController : UIViewController<RKObjectLoaderDelegate>

Du hast es einfach so gegossen:

- (void)objectLoader:(RKObjectLoader*)objectLoader didLoadObject:(id)object  { 
    Translation *myTranslation = (Translation*)object;
    ... 
} 

Oder Sie können den Cast vermeiden, indem Sie den entsprechenden Selektor anrufen

- (void)objectLoader:(RKObjectLoader*)objectLoader didLoadObject:(id)object  { 
    self.translation.text = [[object translatedText] translation];
} 

Sie können Ihre Frage mit der Definition von @Properties in Ihrem Übersetzungsobjekt aktualisieren, um sicherzustellen, dass diese Antwort korrekt ist.

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