Реализация сопоставления объектов с использованием RestKit в Objective-C - PullRequest
0 голосов
/ 30 ноября 2011

У меня проблемы с отображением ответа JSON на объекты с использованием RestKit и Objective-C.

Я уже настроил свой RKObjectManager и сопоставления в моем AppDelegate, как предложено в моего предыдущего поста mja .

Я вызываю свой бэкэнд в моем контроллере , как показано в примере ниже.

Есть две проблемы, с которыми у меня проблемы:

  1. [[RKObjectManager sharedManager] postObject: запрос mapResponseWith: responseMapping делегат: self];} <- Это приводит к тому, что «self» несовместимо с идентификатором типа.Что мне нужно отправить на это? </li>
  2. Как преобразовать результат в didLoadObject в определенный мной объект перевода (translationText)

Любая помощь будет принята с благодарностью.

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

1 Ответ

1 голос
/ 30 ноября 2011

, чтобы исправить первую проблему, объявите свой контроллер в файле .h следующим образом:

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

Вы разыгрываете его так:

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

или вы можете избежатьпроизнесенный путем вызова соответствующего селектора

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

, вы можете обновить свой вопрос с помощью определения @properties в вашем объекте перевода, чтобы убедиться, что этот ответ правильный.

...