难以在RestKit中将对象转换为可用参数

时间:2013-08-17 01:34:59

标签: ios restkit

我正在使用RestKit发出POST请求。我能够成功地做出简单的POST请求。这包括带有简单NSStrings的参数。不幸的是,当参数需要OBJECTS时,我无法正确发出POST请求。

举个例子,这是我的NSDictionary参数:

NSDictionary *sectionStepParams = [NSDictionary dictionaryWithObjectsAndKeys:sectionCodeString,@"1",lastSectionStepCode,@"2",_currentState,@"State",nil];

请注意,“State”的键是State对象。目前这是我的State.h类:

@interface State : NSObject

@property (nonatomic,strong) NSMutableArray *SectionStepResponses;
@property (nonatomic,copy) NSString *Token;

+(RKObjectMapping*)mapping;

-(void)output;
@end

这是一个非常简单的标题。只是一个NSString和一个SectionStep对象数组(另一个简单的类)。

如何正确传递状态对象?将State对象放入NSDictionary不会给我一个正确的JSON响应。我是否必须将此状态对象转换为可以为参数NSDictionary识别的数据?

以下是发出POST请求的完整代码:

RKResponseDescriptor *stateRD = [RKResponseDescriptor responseDescriptorWithMapping:[State mapping] method:RKRequestMethodPOST pathPattern:nil keyPath:@"Response.State" statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)];

NSDictionary *sectionStepParams = [NSDictionary dictionaryWithObjectsAndKeys:sectionCodeString,@"1",lastSectionStepCode,@"2",_currentState,@"State",nil];

//Create Object Manager
RKObjectManager *objectManager = [RKObjectManager managerWithBaseURL:baseurl];
[objectManager addResponseDescriptorsFromArray:@[stateRD]];

//Create Request Operation
RKObjectRequestOperation *requestOperation = [objectManager appropriateObjectRequestOperationWithObject:nil method:RKRequestMethodPOST path:@"getnextstep" parameters:sectionStepParams];


//Set Request Operation Success/Fail block
[requestOperation setCompletionBlockWithSuccess:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) {
    NSLog(@"success %@",mappingResult.array);
       } failure:^(RKObjectRequestOperation *operation, NSError *error) {
    NSLog(@"failed");
}];

注意:此服务需要状态对象并传回状态对象。我能够很好地恢复一个状态对象(它的JSON是空的),问题只是给服务一个合适的状态对象。

谢谢!

1 个答案:

答案 0 :(得分:1)

您是否将State对象转换为字典是个人选择,两者都可以。缺少的是一个映射,告诉RestKit在找到“非标准”对象时应该做什么。字符串,日期和数组可以自动处理,但是对于字典和自定义对象,RestKit期望提供应该映射的键列表。提供方式与接收JSON时的方式完全相同(而不是发送)。


您的代码存在一些问题:

  1. 您需要一个请求描述符来告诉RestKit如何序列化传出数据(通常这可能是您的响应描述符的inverseMapping
  2. 您需要发布对象,而不是将对象添加为参数(目前您将对象设置为nil)。这假设原始对象应该由响应更新......
  3. 您应该设置响应描述符的路径模式,以便RestKit知道它是要使用的模式。