2013-08-17 2 views
0

RestKit을 사용하여 POST 요청을하고 있습니다. 나는 간단한 POST 요청을 성공적으로 만들 수있다. 여기에는 간단한 NSString이있는 매개 변수가 포함됩니다. 불행히도 매개 변수가 OBJECTS를 필요로 할 때 제대로 POST 요청을 할 수 없습니다. "주"의 키가 주 목적이다RestKit에서 개체를 사용 가능한 매개 변수로 변환하는 데 어려움이 있습니다.

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

주의 사항 : 예를 들어

, 여기에 같은 매개 변수의 내 NSDictionary에 보이는 것입니다. 현재이 클래스는 내 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에 대해 인식 할 수있는 데이터로 변환해야합니까?

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"); 
}]; 

참고 :

는 여기에 POST 요청을 만들기위한 내 전체 코드이 서비스는 상태 개체를 필요로하고 상태 개체를 다시 전달합니다. 상태 객체를 다시 가져올 수 있습니다 (JSON이 비어 있음). 문제는 서비스에 적절한 상태 객체를 제공하는 것입니다.

당신을 감사합니다!

답변

1

State 개체를 사전으로 변환할지 여부는 개인적인 선택이므로 둘 다 작동합니다. 누락 된 것은 RestKit이 '비표준'객체를 발견했을 때해야 할 일을 알려주는 매핑입니다. 문자열, 날짜 및 배열은 자동으로 처리 할 수 ​​있지만 사전 및 사용자 지정 개체의 경우 RestKit은 매핑해야하는 키 목록이 제공 될 것으로 기대합니다. 이것은 JSON을받을 때와 동일한 방식으로 (전송하는 대신) 제공됩니다.


코드는 몇 가지 문제가 있습니다.

  1. 당신은 어떻게 보내는 데이터에는 직렬화하는 RestKit 말할 요청 기술자가 필요합니다 (일반적으로이 응답 기술자의 inverseMapping 될 수
  2. 당신 개체를 매개 변수로 추가하지 않고 개체를 게시해야합니다 (현재 nil에 게시 할 개체를 설정 함).이 개체는 응답으로 원본 개체를 업데이트해야한다고 가정합니다.
  3. 경로를 설정해야합니다 RestKit은 응답 디스크립터의 패턴이 사용되는 응답 디스크립터임을 인식합니다.
+0

답장을 보내 주셔서 감사합니다. POST 요청을하기위한 전체 코드를 게시했습니다. RKResponseDescriptor로 충분하지 않은 이유는 무엇입니까? Restkit에 배열과 문자열을 포함하는 State 객체가 필요하다고 지정하지 않습니까? – Woodless

+0

Wain, 파라미터를 통해 객체를 기대할 수 있도록 안정적인 API를 만들었습니까? 내 매개 변수를 변환하면 내 POST URL은 다음과 같습니다 APIURL.com/v1/SectionCode=1&LastSectionStepCode=2&State= _ ??? _ 은 "_ ??? _"뭔가가에가는 것을 의미한다 URL, 내 상태 개체를 원합니다. 이 객체를 매개 변수에 넣지 말고 POST해야한다고 생각하십니까? API가 매개 변수에서 State 개체를 가져 오면 방금 변경된 상태 개체를 반환합니다. – Woodless

+0

왜 매개 변수로 기대합니까? 매개 변수 여야한다면 RestKit이 매개 변수로 제공하기 전에 상태 개체를 문자열 표현으로 변환해야합니다. – Wain

관련 문제