0

我正在使用 RestKit 发出 POST 请求。我能够成功发出简单的 POST 请求。这包括带有简单 NSString 的参数。不幸的是,当参数需要对象时,我无法正确发出 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 是空的),问题只是为服务提供了一个正确的状态对象。

谢谢你!

4

1 回答 1

0

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


您的代码有几个问题:

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