0
當我做一個得到這樣如何使用Restkit 0.10.X爲POST JSON和地圖響應
//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"];
一切正常,響應從服務器映射到我的Object UrSession。
但是現在我們需要更改客戶端,因爲服務器需要POST而不是GET來登錄。 好吧,那麼這是我的代碼:
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。 服務器對我的POST響應,但我的代碼不映射此響應!!爲什麼?我知道我正在損失一些東西,但我無法理解爲什麼使用GET Restkit從服務器映射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;
}];
謝謝弗拉德,你救了我的命:)。我已經發布了代碼,也許可以對具有相同問題的其他人有用。 –