我正在使用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是空的),问题只是给服务一个合适的状态对象。
谢谢!
答案 0 :(得分:1)
您是否将State
对象转换为字典是个人选择,两者都可以。缺少的是一个映射,告诉RestKit在找到“非标准”对象时应该做什么。字符串,日期和数组可以自动处理,但是对于字典和自定义对象,RestKit期望提供应该映射的键列表。提供方式与接收JSON时的方式完全相同(而不是发送)。
您的代码存在一些问题:
inverseMapping
。nil
)。这假设原始对象应该由响应更新......