Implementazione di mappatura oggetto utilizzando RestKit in Objective-C
-
25-10-2019 - |
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:
- [[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?
- 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);
}
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.