0

RestKit を使用して POST リクエストを作成しています。簡単な POST リクエストを正常に行うことができます。これには、単純な NSString を持つパラメーターが含まれます。残念ながら、パラメータに 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 は空です)。問題は、サービスに適切な状態オブジェクトを与えることだけです。

ありがとう!

4

1 に答える 1

0

Stateオブジェクトを辞書に変換するかどうかは個人的な選択ですが、どちらも機能します。欠けているのは、「非標準」オブジェクトを見つけたときに何をすべきかをRestKitに伝えるためのマッピングです。文字列、日付、および配列は自動的に処理できますが、辞書とカスタム オブジェクトの場合、RestKit はマップする必要があるキーのリストが提供されることを期待しています。これは、JSON を (送信する代わりに) 受信する場合とまったく同じ方法で提供されます。


あなたのコードにはいくつかの問題があります:

  1. 送信データをシリアル化する方法を RestKit に指示するには、リクエスト記述子が必要です (通常、これはinverseMappingレスポンス記述子の .
  2. オブジェクトをパラメーターとして追加するのではなく、オブジェクトを投稿する必要があります (現在、投稿するオブジェクトを に設定していますnil)。これは、元のオブジェクトが応答によって更新される必要があることを前提としています...
  3. 応答記述子のパス パターンを設定して、使用するものであることを RestKit が認識できるようにする必要があります。
于 2013-08-17T22:00:29.280 に答える