2

RESTful Rails サーバーと通信するために、RestKit を使用する iOS アプリがあります。サーバーは、ユーザーの認証に基本的なセッション トークンを使用します。RKObjectManager のメソッドを使用して送信されるすべてのリクエストに、このトークンを追加したいと考えています。

次のメソッドを使用するために、NSManagedObject のカテゴリ オーバーロードを作成しようとしました。

- (void)willSendWithObjectLoader:(RKObjectLoader *)objectLoader

これは問題なく動作しますが、オブジェクト ローダーのパラメーターに追加する方法がわかりません。オブジェクトを再シリアル化するところまで行きましたが、エスケープ文字を使用して送信しないとそれを行う方法はありません。たとえば、次のコードはオブジェクトを JSON シリアライズ形式で提供します。

RKObjectMapping *serializationMapping = [[[RKObjectManager sharedManager] mappingProvider] serializationMappingForClass:[self class]];
RKObjectSerializer *ser = [RKObjectSerializer serializerWithObject:self mapping:serializationMapping];
NSObject<RKRequestSerializable> *obj = [ser serializationForMIMEType:RKMIMETypeJSON error:nil];

しかし、そこに返されたオブジェクトはすぐにパラメーターとして使用されることを意図しているため、次のコードは機能しません

[params setValue:[LCSingletonLoggedInUser sharedLoggedInUser].sessionToken forParam:@"token"];
[params setData:obj.HTTPBody forParam:@"data"];

setObject と setData と obj.HTTPBody だけでなく、obj のさまざまな組み合わせも試しました。

実際に何らかの方法で obj を params に追加すると、サーバーが処理できないエスケープ文字が常に追加されます。params = obj を設定すると、サーバーに正しい値が与えられますが、トークンは含まれません。

4

1 に答える 1

4

queryParamsに追加してみませんか?

NSString *resourcePath = [@"/products" stringByAppendingQueryParameters:_queryParams];

ここで、queryParamsは、トークンを追加するNSMutableDictionaryです。

于 2012-07-16T13:21:58.963 に答える