0

私はrestkitとiOSが初めてです。xcode 4.2 と RestKit 0.2 を使用しています。私が作成したいくつかの REST Web サービスと通信する iPhone アプリを開発していますが、現在問題に直面しています。私の Web サービスのいくつかは、複数回呼び出すことを意図しています。最初のリクエストは問題なく実行されますが、再度呼び出しを行うと、次のエラーが発生します。

「NSInternalInconsistencyException」、理由:「既存の要求記述子と同じオブジェクト クラスの要求記述子を追加できません。」

このエラーの意味は理解できますが、再利用できる呼び出しを実装する方法が見つかりません。私はそれを間違っていると感じています。以下は、Web サービスを呼び出すために使用している関数の 1 つです。

- (void) restAddPlayer:(addPlayer*)add block:(void (^)(id))block{
// Load the object model via RestKit
RKObjectManager *objectManager = [RKObjectManager sharedManager];
RKObjectMapping *categoryRequestMapping = [RKObjectMapping requestMapping];
[categoryRequestMapping addAttributeMappingsFromDictionary:@{@"gName": @"groupName",@"pass":@"pass"}];

RKObjectMapping *reqMapping = [RKObjectMapping requestMapping];
[reqMapping addAttributeMappingsFromDictionary:@{@"plName": @"playerName"}];
[reqMapping addRelationshipMappingWithSourceKeyPath:@"groupInfo" mapping:categoryRequestMapping];
RKRequestDescriptor *requestDescriptor = [RKRequestDescriptor requestDescriptorWithMapping:reqMapping objectClass:[addPlayer class] rootKeyPath:nil];

[objectManager addRequestDescriptor:requestDescriptor];
objectManager.requestSerializationMIMEType = RKMIMETypeJSON;

[objectManager postObject:add path:@"addPlayer"parameters:nil success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) {

                      NSArray* statuses = [mappingResult array];
                     //NSLog(@"Loaded statuses: %@", statuses);
                     // _result = [statuses objectAtIndex:0];
                      block(statuses);

                  }
                 failure:^(RKObjectRequestOperation *operation, NSError *error){
                     NSLog(@"Hit error: %@", error);
                     block(nil);
                 }
    ];
}

リクエスト記述子を追加していることはわかっていますが、関数を再度呼び出すと、別の記述子を追加しようとしているため、エラーが発生します。私が知りたいのは、これを処理する方法です。これにより、投稿されているオブジェクトのさまざまな情報を使用して Web サービスを複数回呼び出すことができます。

事前にすべてに感謝します。

よろしく

4

1 に答える 1

0

「postObject」呼び出しを除いて、このルーチンのすべては、アプリの起動時のアプリデリゲートのように、おそらく別の場所にあるはずです。

マッピング、関係、リクエスト記述子を設定しています。呼び出しごとに指定し続ける必要はありません。それらを一度設定するだけで、準備ができたら「postObject」を呼び出すだけです。同じことがおそらく serializationType にも当てはまります。一部の REST エンドポイントが XML を返し、他のエンドポイントが JSON を返す場合を除き、これを一度設定して忘れても問題ありません。

于 2013-03-19T13:48:48.313 に答える