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 を設定すると、サーバーに正しい値が与えられますが、トークンは含まれません。