Проблема с входом в RestKit для iPhone - PullRequest
0 голосов
/ 06 декабря 2011

Мне трудно разобраться в этой проблеме: я использую Restkit для iPhone SDK 5.0, и я делаю вход в систему в классе Session

NSString* url=[[[RKClient sharedClient]baseURL]stringByAppendingString:@"/users/sign_in"] ;

    RKRequest *request = [RKRequest requestWithURL:[NSURL URLWithString:url] delegate:delegato];

    request.queue = [RKClient sharedClient].requestQueue;
    request.authenticationType = RKRequestAuthenticationTypeHTTP;

    request.username = utente.email;
    request.password = utente.password;
    [request send];

Delegato - это мой "мастер" класс, гдеЯ вызвал метод входа в систему.

Затем я реализовал запрос: didLoadRespons, где a написал следующие строки:

if ([response isSuccessful])

    RKLogDebug(@"Login effettuato con successo %d", response.statusCode );

Это всегда возвращает 200 в качестве кода состояния (всегда пробовал с правильным адресом электронной почты ипароль), но когда я получаю последние вопросы от myWebServer / Recent.json, у меня появляется пустой ответ (я также пытался с загрузчиком объектов, который сделал то же самое), как это происходит, когда я не подключен.

Система журналов напечатала мне эту строку:

2011-12-06 11: 58: 20.480 APP [4364: fb03] D restkit.network:RKRequest.m:362 Отправка асинхронного запроса GET на URLMySite / recent.json.2011-12-06 11: 58: 20.484 APP [4364: fb03] T restkit.network:RKRequest.m:310 Подготовлено GET URLRequest ''. Заголовки HTTP: {"Content-Length" = 0;}.Тело HTTP:.2011-12-06 11: 58: 20.486 APP [4364: fb03] D restkit.network.queue: RKRequestQueue.m: 272 Отправленный запрос из очереди.Количество загрузок = 2 из 5 2011-12-06 11: 58: 20.487 APP [4364: fb03] D restkit.network.queue: RKRequestQueue.m: 443 Полученный ответ на запрос, удаление из очереди.(Сейчас загружается 1 из 5) 2011-12-06 11: 58: 20.622 APP [4364: fb03] D restkit.network:RKResponse.m:196 NSHTTPURLResponse Код состояния: 406 2011-12-06 11: 58: 20.623 APP [4364: fb03] D restkit.network:RKResponse.m:197 Заголовки: {Age = 0;"Cache-Control" = "no-cache";Connection = "keep-alive";«Content-Length» = 1;"Content-Type" = "application / json; charset = utf-8";Дата = «Вт, 06 декабря 2011 10:58:20 GMT»;Сервер = "nginx / 0.7.67";Via = "1.1 лак";"X-Runtime" = "0,006494";"X-Ua-совместимый" = "IE = Edge, chrome = 1";"X-Varnish" = 1786715586;} 2011-12-06 11: 58: 20.623 APP [4364: fb03] T restkit.network:RKResponse.m:202 Прочитать текст ответа:
2011-12-06 11: 58: 20.624 APP [4364: fb03] Я restkit.network:RKRequest.m:562 Код состояния: 406 2011-12-06 11: 58: 20.624 Приложение [4364: fb03] Я restkit.network:RKRequest.m:563 Тело:
2011-12-06 11: 58: 20.625 APP [4364: fb03] Si verificato un errore con il seguente codice 406 2011-12-06 11: 58: 20.625 APP [4364: fb03] D restkit.network.queue:RKRequestQueue.m: 443 Получен ответ на запрос, удаление из очереди.(Сейчас загружается 0 из 5)

Что это значит?

Большое спасибо за помощь.

json:

{
"_id":"4ede406d5040dc0001000009",
"answers_count":2,
"cache_slugs":[
{"_id":"4ede406d5040dc000100000a","slug":"faccio-prova-di-domanda"},
{"_id":"4ede41d8bf3a9e0001000008","slug":"faccio-prova-di-domanda"},
{"_id":"4ee61fd7f24ee9000100008b","slug":"faccio-prova-di-domanda"}],
"created_at":"2011-12-06T16:18:53+00:00",
"detail":"",
"followed_by_user_ids":["4eca5fa1166f360001000014","4eca5fa1166f360001000014","4dd43ff93c40760001000004"],
"slug":"faccio-prova-di-domanda",
"text":"faccio prova di domanda",
"topic_ids":[],
"updated_at":"2011-12-12T15:37:58+00:00",
"user_id":"4eca5fa1166f360001000014"}

И мое сопоставление выглядит так:

RKObjectMapping* questMapping = [RKObjectMapping mappingForClass:[Question class]];
    questMapping.setDefaultValueForMissingAttributes=YES;
    [questMapping mapKeyPath:@"_id" toAttribute:@"idDomanda"];
    [questMapping mapKeyPath:@"text" toAttribute:@"titoloDomanda"];
    [questMapping mapKeyPath:@"detail" toAttribute:@"dettaglioDomanda"];
    //[questMapping mapKeyPath:@"user_id" toRelationship:@"identificativo" withMapping:userMapping];

    [questMapping mapKeyPath:@"created_at" toAttribute:@"dataCreazione"];
    [questMapping mapKeyPath:@"updated_at" toAttribute:@"aggiornataAlle"];

    [questMapping mapKeyPath:@"answers_count" toAttribute:@"numeroRisposte"];
    [questMapping mapKeyPath:@"topic_ids" toAttribute:@"topics"];
    [questMapping mapKeyPath:@"followed_by_user_ids" toAttribute:@"followers"];


    [objectManager.mappingProvider addObjectMapping:questMapping];

    [[RKObjectManager sharedManager].mappingProvider setSerializationMapping:questMapping forClass:[Question class]]; 

И мой код входа в систему это:

[[RKClient sharedClient] setUsername:self.email];
    [[RKClient sharedClient] setUsername:self.password];

    [RKObjectManager sharedManager].client=[RKClient sharedClient];
    RKParams *params = [RKParams params];

    [params setValue:self.email forParam:@"username"];
    [params setValue:self.password forParam:@"password"];

    [[RKClient sharedClient] setAuthenticationType:RKRequestAuthenticationTypeHTTP];
    [[RKClient sharedClient] post:@"/users/sign_in" params:params delegate:delegato];

Это правильно?

1 Ответ

0 голосов
/ 12 декабря 2011

Необходимо определить сопоставление с помощью [[RKObjectManager sharedManager].mappingProvider addObjectMapping:mapping]; Более подробная информация содержится в документации и найти часть "Отображение без KVC"

...