Я новичок в разработке для iOS, и у меня возникают проблемы с выполнением простого запроса Json POST.У меня есть NSDictionary, содержащий пользователя и пароль, и я хочу отправить эти значения в виде Json на сервер и получить ответ.У меня это работало без использования restkit, но я не могу понять, как сделать то же самое, используя RestKit, и просто не могу найти хороший пример того, что я хочу.
- (bool) login{
NSMutableDictionary* params = [[NSMutableDictionary alloc] init];
[params setValue:self.email forKey:@"email"];
[params setValue:self.password forKey:@"password"];
NSMutableDictionary* rpcData = [[NSMutableDictionary alloc] init];
[rpcData setValue:@"2.0" forKey:@"jsonrpc"];
[rpcData setValue:@"authenticate" forKey:@"method"];
[rpcData setValue:@"" forKey:@"id"];
[rpcData setValue:params forKey:@"params"];
[[RKClient sharedClient] post:@"/api/rpc/" params:rpcData delegate:self];
return nil;
}
Сервер ожидает Jsonнапример:
{
jsonrpc : '2.0',
method : 'authenticate', // method name goes here
params : { // params are method-specific
email : 'test@test.com',
password : 'secret'
},
id : 2 // The id can be anything, it will be sent back with the response
}
Я понимаю, что в RestKit есть парсер Json, но я не могу найти никакой документации о том, как анализировать мой словарь rpcData, нужно ли мне использовать внешнюю библиотеку?.
Прямо сейчас связь с сервером в порядке, но я не отправляю то, что ожидается.Мой словарь отображается следующим образом: «ключ = значение? Ключ2 = значение2 ...».Это очень глупый вопрос, но я застрял.
Обновление
К тому времени, когда я написал это, оно работало, но Restkit был обновлен, поэтому я 'я не уверен, что это сработает, пожалуйста, проверьте их документацию
Вот решение моей проблемы, то, что я делаю, идеально подходит для работы с API-интерфейсами RPC, когда вам нужно вызвать службу:
1.- Сначала в ваш объект необходимо импортировать Restkit и RKRequestSerialization, это очень важно:
#import <RestKit/RestKit.h>
#import <RestKit/RKRequestSerialization.h>
@interface myObject : NSObject <RKRequestDelegate,RKObjectLoaderDelegate>
2.- Вот функция входа в систему, отправляющая сообщение:
- (void) login:(NSString *)username :(NSString *)password{
RKClient *myClient = [RKClient sharedClient];
NSMutableDictionary *rpcData = [[NSMutableDictionary alloc] init ];
NSMutableDictionary *params = [[NSMutableDictionary alloc] init];
//User and password params
[params setObject:password forKey:@"password"];
[params setObject:username forKey:@"email"];
//The server ask me for this format, so I set it here:
[rpcData setObject:@"2.0" forKey:@"jsonrpc"];
[rpcData setObject:@"authenticate" forKey:@"method"];
[rpcData setObject:@"" forKey:@"id"];
[rpcData setObject:params forKey:@"params"];
//Parsing rpcData to JSON!
id<RKParser> parser = [[RKParserRegistry sharedRegistry] parserForMIMEType:RKMIMETypeJSON];
NSError *error = nil;
NSString *json = [parser stringFromObject:rpcData error:&error];
//If no error we send the post, voila!
if (!error){
[[myClient post:@"/" params:[RKRequestSerialization serializationWithData:[json dataUsingEncoding:NSUTF8StringEncoding] MIMEType:RKMIMETypeJSON] delegate:self] send];
}
}