2013-04-16 55 views
1

編碼符合密鑰文本的關鍵值現在,我一直在試圖找出爲什麼我使用iOS 6.1.3和Xcode 4.6來獲取錯誤。 2和RestKit 0.20.0:這個類不是使用RestKit v0.20.0

「...此類別不是關鍵字符合關鍵字文字的值。」

奇怪的是我可以接收(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]; 
} 

在這一點上,我很茫然。

+0

您可以包含錯誤信息的地方說:** **這是類不符合的部分? – Tobi

回答

2

請您btnSendClicked方法中添加一個逆映射到你的RKRequestDescriptor象下面這樣:

RKRequestDescriptor *requestDescriptor = [RKRequestDescriptor  
    requestDescriptorWithMapping:[requestMapping inverseMapping] 
        objectClass:[SignalMessage class] 
        rootKeyPath:@""]; 
+0

這樣做。非常感謝你! –

相關問題