Reputation: 5872
I am having trouble mapping a JSON response to objects using RestKit and Objective-C.
I have already set up my RKObjectManager and mappings in my AppDelegate as suggested in my previous post by mja.
I call my backend in my controller as per the example below.
There are two issues I'm having trouble with:
Any help would be much appreciated.
@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);
}
Upvotes: 0
Views: 740
Reputation: 5066
to rectify the first issue, declare your controler in the .h file as follows:
#import "RestKit/RestKit.h"
...
@interface MyController : UIViewController<RKObjectLoaderDelegate>
You cast it just like this:
- (void)objectLoader:(RKObjectLoader*)objectLoader didLoadObject:(id)object {
Translation *myTranslation = (Translation*)object;
...
}
or you can avoid the cast by calling appropriate selector
- (void)objectLoader:(RKObjectLoader*)objectLoader didLoadObject:(id)object {
self.translation.text = [[object translatedText] translation];
}
you may update your question with the definition of @properties in your Translation object in order to be sure this answer is correct.
Upvotes: 1