этот класс не соответствует кодированию значения ключа для текста ключа с использованием RestKit v0.20.0

Вот уже 2 дня я пытаюсь выяснить, почему я получаю ошибку, используя iOS 6.1.3 с Xcode 4.6.2 и RestKit 0.20.0:

"... этот класс не соответствует кодированию значения ключа для ключа Text."

Странно то, что я могу получить (GET) объект JSON в порядке. Ошибка возникает, когда я создаю образец объекта SignalMessage, а затем пытаюсь вернуть его на сервер.

JSON выглядит следующим образом:

{"Text":"New Message","HasMessage":"true"}

Объект SignalMessage выглядит следующим образом:

#import <Foundation/Foundation.h>

@interface SignalMessage : NSObject {

}

@property (nonatomic, copy) NSString *signalText;
@property (nonatomic, retain) NSNumber *isHasMessage;

@end

И реализация такая:

#import "SignalMessage.h"

@implementation SignalMessage

@synthesize isHasMessage, signalText;

@end

Моя правильно работающая функция getMessage выглядит так:

- (IBAction)getMessage:(id)sender;
{
    NSLog(@"%@", @"Getting message... ");

    NSURL *url = [NSURL URLWithString:@"http://ec2-54-243-148-145.compute-1.amazonaws.com/TabletPractice/api/signal?clientIdentifier=2"];

    RKObjectManager *manager =  [RKObjectManager managerWithBaseURL:url];

    RKObjectMapping *responseMapping = [RKObjectMapping mappingForClass:[SignalMessage class]];
    [responseMapping addAttributeMappingsFromDictionary:@{@"Text":@"signalText", @"HasMessage": @"isHasMessage"}];
    RKResponseDescriptor *responseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:responseMapping pathPattern:nil keyPath:nil statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)];

    [manager addResponseDescriptor:responseDescriptor];

    [manager getObject:nil path:@"" parameters:nil success:^(RKObjectRequestOperation *operation, RKMappingResult *result)
    {
        NSArray *theresults = [result array];
        for (SignalMessage *item in theresults) {
            self.txtMessage.text = item.signalText;
            [self hideControls];
        }
    }  failure:^(RKObjectRequestOperation * operation, NSError * error)
     {
         NSLog (@"Server WS call failure: operation: %@ \n\nerror: %@", operation, error);
     }];
}

И вот сообщение sendClicked, которое меня огорчает:

- (IBAction)btnSendClicked:(id)sender;
{
    if ([txtMessage.text length] < 1)
        return;

    NSURL *url = [NSURL URLWithString:@"http://ec2-54-243-148-145.compute-1.amazonaws.com/TabletPractice/api/signal?clientIdentifier=2"];
    RKObjectManager *manager =  [RKObjectManager managerWithBaseURL:url];
    RKObjectMapping *requestMapping = [RKObjectMapping requestMapping];
    [requestMapping addAttributeMappingsFromDictionary:@{@"Text":@"signalText", @"HasMessage": @"isHasMessage"}];
    RKRequestDescriptor *requestDescriptor = [RKRequestDescriptor requestDescriptorWithMapping:requestMapping
                                                                                   objectClass:[SignalMessage class]
                                                                                   rootKeyPath:@""];
    [manager addRequestDescriptor:requestDescriptor];

    SignalMessage *newMessage = [[SignalMessage alloc] init];
    newMessage.signalText = @"Test Message";
    BOOL isMsg = TRUE;
    NSNumber *boolAsNumber = [NSNumber numberWithBool:isMsg];
    newMessage.isHasMessage = boolAsNumber;

    [manager putObject:newMessage path:@"" parameters:nil success:^(RKObjectRequestOperation *operation, RKMappingResult *result) {
        NSLog(@"We object mapped the response with the following result: %@", result);
    }  failure:^(RKObjectRequestOperation * operation, NSError * error)
     {
         NSLog (@"Server WS call failure: operation: %@ \n\nerror: %@", operation, error);
     }];

    [self hideControls];
}

На данный момент я в растерянности.


person Thomas Jaeger    schedule 16.04.2013    source источник
comment
Не могли бы вы включить часть сообщения об ошибке, в которой говорится, какой класс не соответствует требованиям?   -  person Tobi    schedule 16.04.2013


Ответы (1)


Пожалуйста, добавьте обратное сопоставление к вашему RKRequestDescriptor в вашем методе btnSendClicked, как показано ниже:

RKRequestDescriptor *requestDescriptor = [RKRequestDescriptor      
  requestDescriptorWithMapping:[requestMapping inverseMapping]
                   objectClass:[SignalMessage class]
                   rootKeyPath:@""];
person ararog    schedule 16.04.2013
comment
Это сделало это. Большое спасибо! - person Thomas Jaeger; 17.04.2013