0

このようにゲットするとき

//Query Parameters for Login: Email and Password
NSDictionary *queryParams;
queryParams = [NSDictionary dictionaryWithObjectsAndKeys: email,@"email",password,@"password", nil];
RKObjectManager *objectManager = [RKObjectManager sharedManager];

//Pointing to the login query in the server
RKURL *URL = [RKURL URLWithBaseURL:[objectManager baseURL] resourcePath:@"/default/api/login.json" queryParameters:queryParams];
[objectManager loadObjectsAtResourcePath:[NSString stringWithFormat:@"%@?%@", [URL resourcePath], [URL query]] delegate:self];

そして、次のようなマッピングを使用します。

//Creamos un mapeo para el Login mapping
RKObjectMapping *sessionMapping = [RKObjectMapping mappingForClass:[UrSession class]];
[sessionMapping mapKeyPathsToAttributes:@"uid", @"uid", @"token", @"token", nil];
[objectManager.mappingProvider setMapping:sessionMapping forKeyPath:@"result"];

すべてがOKです。サーバーからの応答は私のオブジェクトUrSessionにマップされます。

ただし、サーバーにはログイン用のGETではなくPOSTが必要なため、クライアントを変更する必要があります。さて、これは私のコードです:

RKClient *myClient = [RKClient sharedClient];

NSMutableDictionary *params = [[NSMutableDictionary alloc] init];

//User and password params
[params setObject:password forKey:@"password"];
[params setObject:email forKey:@"email"];


//Parsing rpcData to JSON!
id<RKParser> parser = [[RKParserRegistry sharedRegistry] parserForMIMEType:RKMIMETypeJSON];
NSError *error = nil;
NSString *json = [parser stringFromObject:params error:&error];

//If no error we send the post, voila!
if (!error){
    [myClient post:@"/default/api/loginPost.json" params:[RKRequestSerialization serializationWithData:[json dataUsingEncoding:NSUTF8StringEncoding] MIMEType:RKMIMETypeJSON] delegate:self];
}

OK、ここまではすべてOKです。POSTに対するサーバーの応答ですが、コードがこの応答をマップしていません!!..なぜですか。何かが失われていることはわかっていますが、GET Restkit Mapを使用してサーバーからJSONをマップする理由は理解できませんが、GETを使用すると理解できません。

コードで機能するソリューションが見つからないため、私は少し必死です。

ご協力ありがとうございました。


最後にこれはコードです:

NSMutableDictionary *paramsDic = [[NSMutableDictionary alloc] init];

//User and password params
[paramsDic setObject:password forKey:@"password"];
[paramsDic setObject:email forKey:@"email"];

//Parsing to JSON
id<RKParser> parser = [[RKParserRegistry sharedRegistry] parserForMIMEType:RKMIMETypeJSON];
NSError *error = nil;
NSString *json = [parser stringFromObject:paramsDic error:&error];
RKParams *params = [RKRequestSerialization serializationWithData:[json dataUsingEncoding:NSUTF8StringEncoding]MIMEType:RKMIMETypeJSON];

[[RKObjectManager sharedManager] loadObjectsAtResourcePath:@"loginPost.json" usingBlock:^(RKObjectLoader * loader)
 {
     loader.method = RKRequestMethodPOST;
     loader.params = params;
     loader.delegate = self;
  }];
4

1 に答える 1

0

RKClientを使用してリクエストを行うと、レスポンスはオブジェクトにマップされません。マッピングにはRKObjectManagerを使用する必要があります。

次のようなブロックを使用して、メソッドloadObjectAtResourcePathでPOSTリクエストを行うことができます。

 [[RKObjectManager sharedManager] loadObjectsAtResourcePath:@"/path" usingBlock:^(RKObjectLoader * loader)
  {
                loader.method = RKRequestMethodPost;
                loader.params = [RKRequestSerialization serializationWithData:[requestString dataUsingEncoding:NSUTF8StringEncoding MIMEType:RKMIMETypeJSON];
                loader.delegate = self;
  }];

応答はオブジェクトにマップされます。

于 2013-01-10T14:34:07.223 に答える