Domanda

Sto avendo difficoltà mappatura una risposta JSON per oggetti utilizzando RestKit e Objective-C.

Ho già impostare il mio RKObjectManager e mappature nella mia AppDelegate come suggerito in il mio precedente post da MJA .

io chiamo il mio backend nel mio Controller come per l'esempio che segue.

Ci sono due questioni Ho problemi con:

  1. [[RKObjectManager sharedManager] postObject: Richiesta mapResponseWith: responseMapping delegato: self]; } <- Il risultato è un "io" è incompatibile con il tipo di id. Di cosa ho bisogno da trasmettere a questo?
  2. Come ho lanciato il risultato in didLoadObject all'oggetto traduzione ho definito (translationText)

Qualsiasi aiuto sarebbe molto apprezzato.

@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);  
}
È stato utile?

Soluzione

per risolvere il primo numero, dichiarare il vostro controler nel file .h come segue:

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

Si gettò proprio come questo:

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

o si può evitare il cast chiamando appropriata di selezione

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

È possibile aggiornare la tua domanda con la definizione di @properties nel vostro oggetto traduzione in modo da essere sicuri che questo risposta è corretta.

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